我正在 Python 交互式 shell 上尝试以下代码:
>> unicode("�'ам интересна информация")
它给了我以下错误:
'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
如何在不丢失任何信息的情况下将此字符串正确转换为 Unicode?
在字符串前面加上u
:
u"�'ам интересна информация"
你所拥有的只是一堆二进制数据(即一个字节“字符串”)。在任何情况下,您都必须知道编码才能正确读取它。
我可能会假设它是 UTF-8 .. 谷歌翻译说它的保加利亚语,它通常是用编码的,('iso_8859_5')
但是当我尝试它时,它只会弄得一团糟。
我正在做的是将字节字符串放入普通(非 unicode)字符串中,如下所示:
s = "�'ам интересна информация"
第一个字母具有字节值:
>>> s[0]
'\xef'
>>> ord(s[0])
239
然后尝试将其解码为不同的编码方案:
>>> from encodings import aliases
>>> print(aliases.aliases.keys())
>>> print s.decode('latin4')
īŋŊ'Đ°Đŧ иĐŊŅĐĩŅĐĩŅĐŊĐ° иĐŊŅĐžŅĐŧĐ°ŅиŅ
>>> print s.decode('iso_8859_5')
яПН'аАаМ аИаНбаЕбаЕбаНаА аИаНбаОбаМаАбаИб
>>> print s.decode('utf_16')
뿯➽냐볐퀠킸톽킂통킀통킁킽₰룐뷐蓑뻐胑볐냐蛑룐近
>>> print s.decode('utf_8')
�'ам интересна информация
所以我能想出的最好的答案是:
如何在不丢失任何信息的情况下将此字符串正确转换为 Unicode?
>>> uniVersion = "�'ам интересна информация".decode('utf-8')
>>> print uniVersion
�'ам интересна информация
就像@Joey 说的那样,你所拥有的只是一串字节,如果不知道它已经在什么编码中,你就无法真正将它转换为 unicode。
您尝试的代码不起作用,因为它默认假设数据采用 ascii 7 位编码。你可以稍微调整一下:
>>> uniVersion = unicode("�'ам интересна информация", 'utf-8')
您只是在告诉 unicode 函数,这些字节以 utf-8 格式编码。
当字体没有该字符的表示时,使用“�”符号。
我希望它不应该是字节流的一部分,或者它在某个时候被损坏了,或者它前面可能有更多的字节丢失,这会给它更多的意义。
请随时在评论中要求任何澄清。