1、不同编码之间进行转换的桥梁是最上层的字符集。
2、python2的字符本质是一种二进制码。
python环境下:
如图所示:
>>> s = "你好"
>>> s
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> type(s)
<type 'str'>
>>> s.decode("utf-8")
u'\u4f60\u597d'
>>>
从打印出来的信息看,s本质是一个十六进制。所以需要解码 。
代開发票xxxxxxxx钱
相同字符串,不同编码规则下的,十六进制:
'\xe4\xbb\xa3\xe9\x96\x8b\xe5\x8f\x91\xe7\xa5\xa813537741120\xe9\x92\xb1' != '\xb4\xfa\xe9_\xb7\xa2\xc6\xb113537741120\xc7\xae'
所以比较需要使用什么饭的编码规则进行比较。
所以需要:底层二进制-->相应的正确解码规则-->最上层的字符集-->任意的编码规则-->编码规则下相应的二进制
python3:
>>> s="你好"
>>> type(s)
<class 'str'>
>>> s
'你好'
>>> s.decode("utf-8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'
>>> s.encode("utf-8")
b'\xe4\xbd\xa0\xe5\xa5\xbd'
>>>
python3中字符串是最上层的字符集,所以不能进行解码的。只有编码。