当我尝试使用我的电子邮件解析器解码 shift_jis 编码的电子邮件并将其转换为 unicode 时,我收到一条错误消息,提示“UnicodeDecodeError:'shift_jis' 编解码器无法解码位置 2-3 中的字节:非法多字节序列”。代码和电子邮件可以在下面找到:
import email.header
import base64
import sys
import email
def getrawemail():
line = ' '
raw_email = ''
while line:
line = sys.stdin.readline()
raw_email += line
return raw_email
def getheader(subject, charsets):
for i in charsets:
if isinstance(i, str):
encoding = i
break
if subject[-2] == "?=":
encoded = subject[5 + len(encoding):len(subject) - 2]
else:
encoded = subject[5 + len(encoding):]
return (encoding, encoded)
def decodeheader((encoding, encoded)):
decoded = base64.b64decode(encoded)
decoded = unicode(decoded, encoding)
return decoded
raw_email = getrawemail()
msg = email.message_from_string(raw_email)
subject = decodeheader(getheader(msg["Subject"], msg.get_charsets()))
print subject
电子邮件: http: //pastebin.com/L4jAkm5R
我已经阅读了另一个 Stack Overflow 问题,这可能与 Unicode 和 shift_jis 的编码方式之间的差异有关(他们引用了这篇Microsoft 知识库文章)。如果有人知道我的代码中的什么可能导致它无法工作,或者如果这甚至可以合理地修复,我将非常感谢找出方法。