所以我正在将一些代码从 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' 因为这是我首先输入的内容?
最佳答案
您的变量 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
å¸æ·
如果您使用输入“\u5e10\u6237”,您将打印初始字符:
>>> c=u'\u5e10\u6237'
>>> print c
帐户
编码和解码只是使用对应值<->字符的表。问题是,根据使用的编码(即表),相同的值不会呈现相同的字符。
主要困难是当您不知道必须处理的输入字符串的编码时。有些工具可以尝试猜测它,但并不总是成功(请参阅 https://superuser.com/questions/301552/how-to-auto-detect-text-file-encoding )。
关于python - python2中的string.decode()函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38330354/