我在Python交互式shell上尝试以下代码:
>> unicode("�'ам интересна информация")
它给了我以下错误:
'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
如何在不丢失任何信息的情况下将此字符串正确转换为Unicode? p>
答案 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? p>
>>> uniVersion = "�'ам интересна информация".decode('utf-8')
>>> print uniVersion
�'ам интересна информация
就像@Joey所说的那样,你所拥有的只是一串字节,如果不知道它已经存在什么编码,就无法真正将其转换为unicode。
您尝试的代码无法正常工作,因为它默认假设数据采用ascii 7位编码。你可以调整一下:
>>> uniVersion = unicode("�'ам интересна информация", 'utf-8')
你只是告诉unicode函数,这些字节以utf-8格式编码。
当字体没有该字符的表示时,使用' '符号。
我希望它不是真的应该是字节流的一部分,或者它在某些时候被破坏,或者可能在它前面有更多字节丢失,这会给它带来更多意义。
请随时在评论中要求澄清。