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
来产生一个unicode
string
并编码一个unicode
string来产生一个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
。 隐含的编码使解码工作是失败的。