unicode-Python UnicodeDecodeError-我误解了编码吗?

有什么想法为什么不起作用? 我真的以为“忽略”会做正确的事。

>>> 'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 4: ordinal not in range(128)
Greg asked 2019-12-29T14:56:48Z
3个解决方案
211 votes

…有一个被称为“编码”的原因…

一些前言:将unicode视为规范或理想状态。 Unicode只是一个字符表。 №65是拉丁首都A。№937是希腊首都欧米茄。 只是。

为了使计算机存储和/或操作Unicode,它必须将其编码为字节。 Unicode最直接的编码是UCS-4; 每个字符占用4个字节,并且所有〜1000000个字符都可用。 4个字节包含Unicode表中的字符数,为4个字节的整数。 另一个非常有用的编码是UTF-8,它可以编码任何带有1-4个字节的Unicode字符。 但是也有一些有限的编码,例如“ latin1”,其中包含的字符范围非常有限,主要由西方国家使用。 这样的编码每个字符仅使用一个字节。

基本上,Unicode可以使用多种编码进行编码,并且可以将编码后的字符串解码为Unicode。 事实是,Unicode来得太晚了,所以我们每个使用8位字符集成长的人都为时已晚,以至于我们一直都在使用编码字符串。 编码可以是ISO8859-1,Windows CP437或CP850,或者是或或,这取决于我们的系统默认值。

因此,当在源代码中输入字符串“将“监视”添加到列表”(我想您想将字符串“将监视”添加到列表,请注意第二个引号)时,实际上您已经在使用字符串 根据系统的默认代码页(通过字节\ x93编码),我假定您使用的是Windows代码页1252,“西方”。 如果要从中获取Unicode,则需要从“ cp1252”编码中解码字符串。

因此,您想做的是:

"add \x93Monitoring\x94 to list".decode("cp1252", "ignore")

不幸的是,Python 2.x也包括用于字符串的2679216105318777777856方法。 这是用于“特殊”编码的便捷功能,例如“ zip”或“ rot13”或“ base64”,与Unicode无关。

无论如何,对于往返Unicode转换,您只需要记住以下几点:

  • Unicode字符串被编码为Python 2.x字符串(实际上是字节序列)
  • Python 2.x字符串被解码为Unicode字符串

在这两种情况下,您都需要指定将要使用的编码。

我不是很清楚,我很困,但是我希望能有所帮助。

PS:一个幽默的旁注:玛雅人没有Unicode。 古罗马人,古希腊人,古埃及人也没有。 他们都有自己的“编码”,对其他文化几乎没有尊重。 所有这些文明都崩溃了。 想想人! 使您的应用程序具有Unicode意识,造福全人类。 :)

PS2请不要通过说“但是中国人……”破坏先前的信息。 但是,如果您倾向于这样做或有义务这样做,则可以通过认为Unicode BMP主要由中文表意文字填充来推迟它,那么ergo Chinese是Unicode的基础。 只要人们开发支持Unicode的应用程序,我就可以继续发明令人毛骨悚然的谎言。 干杯!

tzot answered 2019-12-29T14:58:10Z
4 votes

编码可用于unicode字符串,但是您那里的字符串似乎不是unicode(尝试使用u'add \ x93Monitoring \ x93列出')

>>> u'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
'add \x93Monitoring\x93 to list '
rob answered 2019-12-29T14:58:30Z
-3 votes

这似乎可行:

'add \x93Monitoring\x93 to list '.decode('latin-1').encode('latin-1')

有什么问题吗? 我不知道何时会出现“忽略”,“替换”和其他此类编码错误处理?

Greg answered 2019-12-29T14:58:55Z
translate from https://stackoverflow.com:/questions/368805/python-unicodedecodeerror-am-i-misunderstanding-encode