我知道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。
答案 0 :(得分:3)
如果您使用的是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