2013-05-31 84 views
0

我知道bytes.decode給出了一個字符串,string.encode給出了字節,但只有在使用正確的encoding時纔會如此。如何找到python3字節對象的編碼

假設我有使用gb18030
如果我嘗試使用big5將其解碼編碼的bytes對象:

>>name = '深入 damon' 
>>b1 = name.encode('gb18030') 
>>> b1.decode('big5') 
UnicodeDecodeError: 'big5' codec can't decode byte 0xc8 in position 2: illegal multibyte sequence 

有一些方法的編碼可以從bytes對象可以找到?
我在python3文檔中找不到任何有用的API。

+0

沒有。如果找到它的一般方法,解碼函數就不需要它的參數。你能得到的最好的是受過教育的猜測。編碼不是包含在字節中的信息的一部分(除非你知道處理自描述數據,如HTML)),它是它的外部屬性。 –

回答

3

您可以使用chardet軟件包。閱讀this教程。


如果您在使用Ubuntu:

sudo apt-get install python3-chardet 

如果您正在使用PIP:

pip install chardet2 
+0

謝謝@kev,我碰到了universaldetector導入錯誤,但是您的dip3案例研究的鏈接幫助..很多義務 – damon

2

既然你從控制檯輸入時,編碼將sys.stdin.encoding

>>> name = '深入 damon' 
>>> import sys 
>>> sys.stdin.encoding 
'UTF-8' 
>>> b1 = name.decode(sys.stdin.encoding) 
>>> b1 
u'\u6df1\u5165 damon' 
>>> b1.encode(sys.stdin.encoding) 
'\xe6\xb7\xb1\xe5\x85\xa5 damon' 
>>> print b1.encode(sys.stdin.encoding) 
深入 damon 
相關問題