有什么想法为什么不起作用?我真的以为“忽略”会做正确的事。
>>> '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)
最佳答案
…有一个被称为“编码”的原因…
一些前言:将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也为字符串提供了
.encode
方法。这是用于“特殊”编码的便捷功能,例如“zip”或“rot13”或“base64”,与Unicode无关。无论如何,对于往返Unicode转换,您只需要记住以下几点:
在这两种情况下,您都需要指定将要使用的编码。
我不是很清楚,我很困,但是我希望能有所帮助。
PS:一个幽默的旁注:玛雅人没有Unicode。古罗马人,古希腊人,古埃及人也没有。他们都有自己的“编码”,对其他文化几乎没有尊重。所有这些文明都崩溃了。想想人!使您的应用程序具有Unicode意识,造福全人类。 :)
PS2请不要通过说“但是中国人……”破坏先前的信息。但是,如果您倾向于这样做或有义务这样做,则可以通过认为Unicode BMP主要由中文表意文字填充来推迟它,那么ergo Chinese是Unicode的基础。只要人们开发支持Unicode的应用程序,我就可以继续发明令人毛骨悚然的谎言。干杯!