所以我将一些代码从python2转换为python3。我不太了解python2编码/解码功能,甚至不能确定我应该在python3中做什么
在python2中,我可以做以下事情:
>>> c = '\xe5\xb8\x90\xe6\x88\xb7'
>>> print c
帐户
>>> c.decode('utf8')
u'\u5e10\u6237'
我刚刚在那里做了什么? 'u'前缀不是指unicode吗? utf8不应该是'\ xe5 \ xb8 \ x90 \ xe6 \ x88 \ xb7',因为这是我首先输入的内容吗?
答案 0 :(得分:1)
您的变量c未声明为unicode(前缀为' u')。如果您使用' latin1'解码它?编码你会得到相同的结果:
>>> c.decode('latin1')
u'\xe5\xb8\x90\xe6\x88\xb7'
请注意decode
的结果是一个unicode字符串:
>>> type(c)
<type 'str'>
>>> type(c.decode('latin1'))
<type 'unicode'>
如果将c声明为unicode并保持相同的输入,则不会打印相同的字符:
>>> c=u'\xe5\xb8\x90\xe6\x88\xb7'
>>> print c
å¸æ·
如果您使用输入&#39; \ u5e10 \ u6237&#39;,您将打印初始字符:
>>> c=u'\u5e10\u6237'
>>> print c
帐户
编码和解码只是使用对应值&lt; - &gt;字符的表。问题是,根据所使用的编码(即表格),相同的值不会呈现相同的字符。
主要的困难是当你不知道你必须处理的输入字符串的编码时。有些工具可以尝试猜测它,但并不总是成功(参见https://superuser.com/questions/301552/how-to-auto-detect-text-file-encoding)。