Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python编码错误_Python_Encoding_Character Encoding_Non Ascii Characters - Fatal编程技术网

使用Python编码错误

使用Python编码错误,python,encoding,character-encoding,non-ascii-characters,Python,Encoding,Character Encoding,Non Ascii Characters,我编写了一个代码来连接imap,然后解析身体信息并插入数据库。但我在口音方面有些问题 从电子邮件标题中,我得到了以下信息: 内容类型:text/html;字符集=ISO-8859-1 但是,我不确定我是否能相信这些信息 这封邮件是用葡萄牙语写的,所以我们有很多带口音的单词。例如,我从电子邮件源代码中提取以下短语(使用我的浏览器): “……电子商店……” 因此,我连接到imap并获取了一些电子邮件: 。。。类型,数据=M.fetch(num'(RFC822) 当我打印内容时,我得到以下单词: pr

我编写了一个代码来连接imap,然后解析身体信息并插入数据库。但我在口音方面有些问题

从电子邮件标题中,我得到了以下信息:

内容类型:text/html;字符集=ISO-8859-1

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

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

“……电子商店……”

因此,我连接到imap并获取了一些电子邮件:

。。。类型,数据=M.fetch(num'(RFC822)

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

print data[0][1]
我试图使用
.decode('utf-8')
,但没有成功

尼科斯公寓


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

标题上说它使用的是“ISO-8859-1”字符集。因此,您需要使用该编码对字符串进行解码

试试这个:

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

指定源代码编码对我来说很有效。这是我下面示例代码顶部的代码。这应该在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)

见:

这似乎保留了所有口音:

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

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

请注意,对于上一个版本,即使结果看起来相同,但返回的结果并不相等。例如:

#!/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
EDIT2:

这将返回相同的值:

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编码的数据库是否有效。可能不会吧?

谢谢Martijn Pieters。我们发现这封邮件有两种不同的编码。我不得不把这些部分分开单独处理

打印什么(类型(数据[0][1]);打印(repr(数据[0][1]))
print?@WinstonEwert-python2。7@MartijnPieters-输入:和“print(repr)(“返回的重音如下:fun\xc3\xa7\xc3\xa3o(对不起,这是另一个重音词))不,这正是我想看到的。这是UTF8中的
função
解码('UTF8'))
应该可以,也许你需要给我们看更多的代码?@MartijnPieters,我试过:打印repr(数据[0][1])。解码('utf8'),但仍然显示“fun\xc3\xa7\xc3\xa3o”(关于解码单词“funço”,你是对的)这不会导致OP看到的双字节。让我们看看我对数据类型和repr的请求给了我们什么,好吗?它返回了以下错误:UnicodeEncodeError:“charmap”编解码器无法对位置20中的字符u'\x83'进行编码:字符映射到
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...