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

Fac*_*sco 43 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)
Run Code Online (Sandbox Code Playgroud)

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

当我使用'ignore'时,为什么会出现错误?

Aph*_*hex 62

当我第一次开始使用Python字符串和unicode乱搞,我花了一段时间才明白的行话解码编码过,所以这里是我的职位从这里,可以帮助:


可以将解码视为从常规字节串 unicode,以及 unicode 返回的编码.换一种说法:

-代码str产生一个unicode字符串

-代码unicode串产生的str.

所以:

unicode_char = u'\xb0'

encodedchar = unicode_char.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

encodedchar将包含以所选编码显示的unicode字符(在本例中utf-8).

  • Python 3 对编码的**字节数组**和抽象(Unicode)字符**字符串**有更清晰的概念。 (2认同)
  • 应该注意的是,这肯定是FC根本问题的正确答案,但是人们之所以来到这里,是因为他们在没有注意到尝试解码的字符串中有很小一部分是字符串时遇到了这种看似矛盾的行为。已经存在Unicode字符串的其他答案可能会更好。 (2认同)
  • `u'KEEP ME ㉃‰䥈啌ੁ剆䕅 KEEP ME ALSO'.encode('utf-8').decode('ascii','ignore') # 对我有用` (2认同)

Fac*_*sco 18

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

矛盾的是,解码时可能会发生UnicodeEncodeError .它的原因似乎是编码特定的decode()函数,它们通常期望str类型的参数.看来,在看到unicode参数时,decode()函数将其"下转换"为str,然后对结果进行解码,假设它是自己的编码.还可以使用ASCII编码器执行"下转换".因此,解码器内部的编码失败.

  • 这似乎是纯粹的疯狂.如果你在unicode对象上调用decode(),我希望它只是按原样返回对象,因为很明显它已经是一个unicode对象...... (11认同)

Ign*_*ams 5

您正在尝试解码unicode. 使解码工作的隐式编码是失败的。

  • 便利?“显式优于隐式”和“特殊情况不足以打破规则” (7认同)
  • 使用非文本编解码器(例如“unicode-escape”)时,这很方便。在解码之前,它仍然将其编码为 `str`。 (3认同)
  • 所以我想知道为什么 unicode 对象中有一个 decode 方法,它应该做什么? (2认同)