-1

我正在 Python 交互式 shell 上尝试以下代码:

>> unicode("�'ам интересна информация")

它给了我以下错误:

'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)

如何在不丢失任何信息的情况下将此字符串正确转换为 Unicode?

4

2 回答 2

2

在字符串前面加上u:

u"�'ам интересна информация"

你所拥有的只是一堆二进制数据(即一个字节“字符串”)。在任何情况下,您都必须知道编码才能正确读取它。

于 2012-08-29T10:44:32.460 回答
0

我可能会假设它是 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 格式编码。

当字体没有该字符的表示时,使用“�”符号。

我希望它不应该是字节流的一部分,或者它在某个时候被损坏了,或者它前面可能有更多的字节丢失,这会给它更多的意义。

请随时在评论中要求任何澄清。

于 2012-08-29T11:06:10.223 回答