一图看懂 Python 2 / Python 3 编码 | CSDN 博文精选( 二 )

我们之所以会产生困惑 , 是因为PY2和PY3给这些编码格式指定了令人困惑的名字 。 PY2的字符串有两种类型: Unicode类型和str类型 。 PY2的Unicode类型就是Unicode编码 , PY2的str类型泛指除Unicode编码之外的所有编码 , 包括ASCII编码、UTF8编码、GBK编码、cp936编码等 。 PY 3的字符串也有两种类型: bytes类型和str类型 。 PY3的str类型就是Unicode编码 , PY3的bytes类型泛指除unicode编码之外的所有编码 , 包括ASCII编码、UTF8编码、GBK编码、CP936编码等 。 同样是str类型 , 在PY2和PY3中完全颠倒了! 下图稍微补充了一点内容 , 更有助于理解编码问题 。

接下来 , 我们实战演练一下 。

s= 'abc天圆地方' type(s) class ' str ' len(s) 7 s 'abc天圆地方' print(s) abc天圆地方 s.encode( 'unicode-escape' ) b 'abc\\\\u5929\\\\u5706\\\\u5730\\\\u65b9' 不管是否在字符串前面加了u , 只要不在字符串前面使用b , 在IDLE中定义的字符串都是Unicode编码 , 也就是PY3的class ‘str’ , 其长度就是字符数量 , 不是字节数 。 我们把Unicode字符串’abc天圆地方’转成UTF8编码: s_utf8=s.encode( 'utf8' ) type(s_utf8) class ' bytes ' len(s_utf8) 15 s_utf8 b 'abc\\xe5\\xa4\\xa9\\xe5\\x9c\\x86\\xe5\\x9c\\xb0\\xe6\\x96\\xb9' print(s_utf8) b 'abc\\xe5\\xa4\\xa9\\xe5\\x9c\\x86\\xe5\\x9c\\xb0\\xe6\\x96\\xb9' s_utf8.decode( 'utf8' ) 'abc天圆地方'

推荐阅读