2012-08-29 80 views
-1

我想下面的代碼在Python的交互式shell:如何將python轉換爲unicode以下文本?

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

它給我下面的錯誤:

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

我怎樣才能正確地轉換這個字符串不會丟失任何信息的Unicode?

回答

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') 
�'ам интересна информация 

所以最好的我可以拿出你的答案是:

How can I properly convert this string to Unicode without loosing any information?

>>> uniVersion = "�'ам интересна информация".decode('utf-8') 
>>> print uniVersion 
�'ам интересна информация 

像@Joey說,你有什麼纔是字節串,你真的不能把它轉換成Unicode不知道什麼編碼它已經英寸

代碼你正在嘗試不起作用,因爲它默認假設數據是以ascii 7位編碼的。你可以調整它一點:

>>> uniVersion = unicode("�'ам интересна информация", 'utf-8') 

有你剛剛說的是Unicode的功能,這些字節UTF-8格式編碼。

在「」符號用於當字體不具有該字符的表示。

我希望它不是真的應該是字節流的一部分,或者被損壞了在某些時候,或者可能有在它前面的一些字節丟失,會給它更多的含義。

請隨時在評論中要求澄清。

+0

你解釋得很好。實際上,我從html頁面解析並提取這些文本。它正確地解析其他文本,但是對於這個文本,我得到錯誤:''utf8'編解碼器無法解碼位置0中的字節0xd0:無效的連續字節。所以,正如你所說,第一個章程導致了一些問題。但我不知道如何解決。 PLZ PLZ檢查我的其他問題:http://stackoverflow.com/questions/12173255/utf8-codec-cant-decode-byte-0xd0-in-position-0-invalid-continuation-byte – wasimbhalli

+0

看一看HTTP頭找出頁面上的編碼是什麼。如果它在頁面上顯示這些符號,我敢打賭,誰配置他們的Web服務器的編碼設置是錯誤的。我懷疑服務器正在報告utf-8,但實際提供的數據是其他編碼。你能用普通的字符串來保存東西嗎?只是把它們當成字節串? – matiu

+0

我用'「 'ángинтереснаинформация」.decode(「utf-8」,「替換」)'把任何不可轉換的字符串替換成問號,它工作! – wasimbhalli

2

前綴字符串以u

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

你有什麼存在的僅僅是一堆二進制數據(即一個字節「串」)。無論如何,你必須知道編碼才能正確讀取它。