我试图用Python3的bytes.decode(encoding)解码一些电子邮件文本,其中encoding来自电子邮件头的charset字段。
问题:一些电子邮件将'cp-850‘作为他们的字符集,而decode()则接受’cp 850‘。
如果我简单地去掉连字符,那么另一个代码集(如iso-8859-6 )将变成iso88596,这是一种无法识别的编码。
如何在不创建更多未知编码的情况下净化arg encoding?
编辑后续问题:如何从email.message.Message对象获得bytes.decode()接受的格式(别名)的字符集
编辑澄清了问题。以前,当我指字符集时,使用了一个不正确的术语“内容编码”。
发布于 2018-08-22 03:39:31
您可以删除连字符并检查是否存在支持结果编码的编解码器:
import codecs
def sanitize_encoding(enc):
try:
codecs.lookup(enc)
return enc
except LookupError:
try:
enc = enc.replace('-','')
codecs.lookup(enc)
return enc
except LookupError:
# Not a thing, either way
return None
sanitize_encoding('cp-850')
#'cp850'
sanitize_encoding('iso-8859-6')
#'iso-8859-6'https://stackoverflow.com/questions/51959430
复制相似问题