unicode()。decode('utf-8','ignore')引发UnicodeEncodeError

这里是代码:

>>> z = u'\u2022'.decode('utf-8', 'ignore') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2022' in position 0: ordinal not in range(256) 

为什么我在使用.decode时引发UnicodeEncodeError?

为什么我在使用“忽略”时出现错误?

当我第一次开始使用pythonstring和unicode时,我花了一段时间来理解解码编码的术语,所以这里是我的post,可能有所帮助:


解码当作你从常规的字节串 unicode和编码的工作 ,就像你 unicode得到的那样。 换一种说法:

你解码str来产生一个unicodestring

并编码一个unicodestring来产生一个str

所以:

 unicode_char = u'\xb0' encodedchar = unicode_char.encode('utf-8') 

encodedchar将包含您的Unicode字符,以选定的编码(在本例中为utf-8 )显示。

http://wiki.python.org/moin/UnicodeEncodeError

矛盾的是, 解码时可能会发生UnicodeEncodeError。 它的原因似乎是编码特定的decode()函数通常需要一个strtypes的参数。 在看到unicode参数时,decode()函数将其“下变换”为str,然后假定它是自己的编码,对结果进行解码。 它也似乎是“下变换”使用ASCII编码器进行。 因此解码器内部的编码失败。

你正在尝试解码一个unicode 。 隐含的编码使解码工作是失败的。