2

我知道这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对象中找到编码?我在文档
中找不到这方面的任何有用的 api 。python3

4

2 回答 2

7

您可以使用该chardet软件包。阅读教程。


如果您使用的是 Ubuntu:

sudo apt-get install python3-chardet

如果您使用的是 pip:

pip install chardet2 
于 2013-05-31T03:48:59.083 回答
4

由于您是从控制台输入的,因此编码将是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
于 2013-05-31T04:08:55.893 回答