【发布时间】:2019-12-02 22:06:27
【问题描述】:
我正在编写一些 Python 3 代码来获取 NNTP 消息、解析标头并处理数据。我的代码在前几百条消息中运行良好,然后我抛出异常。
例外是:
sys.exc_info()
(<class 'UnicodeDecodeError'>, UnicodeDecodeError('utf-8', b"Ana\xefs's", 3, 4, 'invalid continuation byte'), <traceback object at 0x7fe325261c08>)
问题来自于试图解析主题。消息的原始内容是:
{'subject': 'Re: Mme. =?UTF-8?B?QW5h73Mncw==?= Computer Died', 'from': 'Fred Williams <unclefred@webruler.com>', 'date': 'Sun, 05 Aug 2007 18:55:22 -0400', 'message-id': '<13bclaqcdot4s55@corp.supernews.com>', 'references': '<mq0cb35ci3tv53hnahmnognh2rauqpveqb@4ax.com>', ':bytes': '1353', ':lines': '14', 'xref': 'number1.nntp.dca.giganews.com rec.pets.cats.community:171958'}
那个?UTF-8?是我不知道如何处理的。自己呕吐的代码片段是:
for msgId, msg in overviews:
print(msgId)
hdrs = {}
if msgId == 171958:
print(msg)
try:
for k in msg.keys():
hdrs[k] = nntplib.decode_header(msg[k])
except:
print('Unicode error!')
continue
【问题讨论】:
-
您确定显示的消息实际上是罪魁祸首吗?异常指出,问题发生在字符串
b"Ana\xefs's" -
@omni 实际上
=?UTF-8?B?QW5h73Mncw==?=是b"Ana\xefs's",一旦它被解码(电子邮件不能真正在标题中直接包含utf,所以还有另一种编码为只使用ascii的东西) .见RFC-2047