以下是代码:
>>> 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? p>时会引发UnicodeEncodeError
为什么在使用'ignore'时会出现错误?
答案 0 :(得分:60)
当我第一次开始使用python字符串和unicode时,我花了一些时间来理解 decode 和 encode 的行话,所以这是我{{{ 3}}这可能会有所帮助:
将解码视为从常规字节字符串到 unicode和编码的操作,就像你要做的那样回复来自 unicode。换句话说:
你 de - 编码str
以生成unicode
字符串
和 en - 编写unicode
字符串以生成str
。
所以:
unicode_char = u'\xb0'
encodedchar = unicode_char.encode('utf-8')
encodedchar
将包含以所选编码显示的unicode字符(在本例中为utf-8
)。
答案 1 :(得分:18)
来自http://wiki.python.org/moin/UnicodeEncodeError
矛盾的是,当发生UnicodeEncodeError时可能会发生 解码。它的原因似乎是 通常期望的特定于编码的decode()函数 str类型的参数。看来,看到了 unicode参数,decode()函数“down-convert” 它进入str,然后解码结果,假设它是 他们自己的编码。它似乎也是 使用ASCII编码器执行“下转换”。 因此解码器内的编码失败。
答案 2 :(得分:4)
您正在尝试解码unicode
。使解码工作的隐式编码失败了。