如何找到python3字节对象的编码

时间:2013-05-31 03:47:25

标签: python unicode encoding decode

我知道bytes.decode提供了一个字符串,而string.encode给出了字节,但前提是使用了正确的encoding

假设我有一个使用gb18030编码的字节对象 如果我尝试使用big5解码它:

>>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 docs中找不到任何有用的api。

2 个答案:

答案 0 :(得分:3)

您可以使用chardet包。阅读this教程。


如果您使用的是Ubuntu:

sudo apt-get install python3-chardet

如果你正在使用pip:

pip install chardet2 

答案 1 :(得分:3)

由于您是从控制台输入的,因此编码将为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