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

时间:2011-02-23 20:36:28

标签: python unicode

以下是代码:

>>> 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

为什么在使用'ignore'时会出现错误?

3 个答案:

答案 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。使解码工作的隐式编码失败了。