使用Python编码错误

2024-09-30 01:31:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一段代码来连接imap,然后解析主体信息并插入数据库。但我的口音有点问题。在

从邮件标题我得到了以下信息:

Content-Type: text/html; charset=ISO-8859-1

但是,我不确定我是否能相信这些信息。。。在

邮件是用葡萄牙语写的,所以我们有很多带有口音的单词。例如,我从电子邮件源代码中提取以下短语(使用我的浏览器):

"...instalação de eletrônicos..."

所以,我连接了imap并收到了一些电子邮件:

... typ, data = M.fetch(num, '(RFC822)') ...

当我打印内容时,我得到以下单词:

print data[0][1]
instala+º+úo de eletr+¦nicos

我试图使用.decode('utf-8'),但没有成功。在

instalação de eletrônicos

我怎样才能使它成为人类可读的?我的数据库是utf-8。在


Tags: 代码信息数据库data电子邮件邮件de单词
3条回答

指定源代码编码对我很有用。这是我下面示例代码顶部的代码。这应该在python文件的顶部定义。在

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-

value = """...instalação de eletrônicos...""".decode("iso-8859-15")
print value
# prints: ...instalação de eletrônicos...

import unicodedata
value = unicodedata.normalize('NFKD', value).encode('ascii','ignore')
print value
# prints: ...instalacao de eletronicos...

现在您也可以毫无例外地执行str(value)。在

参见:http://docs.python.org/2/library/unicodedata.html

这似乎保留了所有的口音:

^{pr2}$

编辑:

请注意,对于上一个版本,即使结果看起来相同,它也不会返回equal is True。例如:

#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import unicodedata
inValue = """...instalação de eletrônicos...""".decode("iso-8859-15")
normalizedValue = unicodedata.normalize('NFKC', inValue).encode('utf-8')

try:
    print inValue == normalizedValue
except UnicodeWarning:
    pass
# False

编辑2:

这将返回相同的:

normalizedValue = unicode("""...instalação de eletrônicos...""".decode("iso-8859-15")).encode('utf-8')
print normalizedValue 
print str(normalizedValue )

# prints (without exceptions/errors):
# ...instalação de eletrônicos...
# ...instalação de eletrônicos...

虽然我不确定这是否对utf-8编码的数据库有效。可能不会吧?在

标题显示它使用的是“ISO-8859-1”字符集。所以你需要用这个编码来解码字符串。在

试试这个:

data[0][1].decode('iso-8859-1')

谢谢你的马蒂恩·皮特斯。我们发现电子邮件有两种不同的编码。我不得不把这部分分开单独治疗。在

相关问题 更多 >

    热门问题