Python unicode()

Python unicode(),python,unicode,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, e

代码如下:

>>> 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)
z=u'\u2022'。解码('utf-8','ignore') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/usr/lib/python2.6/encodings/utf_8.py”,第16行,解码 返回编解码器.utf_8_解码(输入,错误,真) UnicodeEncodeError:“latin-1”编解码器无法对位置0中的字符u'\u2022'进行编码:序号不在范围内(256) 为什么在我使用.decode时引发UnicodeEncodeError


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

您尝试解码的是
unicode
。使解码工作正常的隐式编码是失败的地方。

当我第一次开始使用python字符串和unicode时,我花了一段时间才理解解码和编码的术语,因此下面是我的文章,可能会有所帮助:


可以将解码看作是从常规的bytestring到unicode的过程,将编码看作是从unicode返回的过程。换言之:

您可以对
str
进行反编码以生成
unicode
字符串

并对
unicode
字符串进行编码,以生成
str

因此:

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

自相矛盾的是,当 解码。原因似乎是 编写通常需要的特定decode()函数 str类型的参数。在看到 unicode参数,decode()函数“下变频” 将其转换为str,然后对结果进行解码,假设结果为 他们自己的编码。而且似乎 使用ASCII编码器执行“下变频”。 因此,解码器内部的编码失败


所以我想知道为什么unicode对象中有一种解码方法,它应该做什么?当使用非文本编解码器时,例如
unicode escape
,它很方便。在解码之前,它仍然将其编码为
str
?“显式优于隐式”和“特殊情况不足以打破规则”Python 3对编码字节数组和抽象(Unicode)字符串有更清晰的概念。应该注意的是,这肯定是对F.C.潜在问题的正确答案,但是人们来到这里是因为他们遇到了这种看似矛盾的行为,他们没有注意到他们试图解码的字符串中有一小部分已经是Unicode字符串,而其他答案可能更好地满足了他们的需要。
u'KEEP ME㉃‰䥈啌ੁ剆䕅 还有,KEEP ME.encode('utf-8')。decode('ascii','ignore')#为我工作
@DaveKierans,它将丢弃字符串中的所有非ascii字符(例如,那些中文字符)。确保这就是你想要的!这简直是疯了。如果对unicode对象调用decode(),我希望它只返回原样的对象,因为它显然已经是unicode对象了。。。
unicode_char = u'\xb0'

encodedchar = unicode_char.encode('utf-8')