如何在python中转换为unicode以下文本?

时间:2012-08-29 10:43:20

标签: python unicode encoding

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

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

它给了我以下错误:

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

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

2 个答案:

答案 0 :(得分:2)

使用u前缀字符串:

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

你所拥有的只是一堆二进制数据(即字节“字符串”)。无论如何,你必须知道编码才能正确读取它。

答案 1 :(得分: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格式编码。

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

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

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