python3 编码问题,python3的编码方式
py2和py3都使用unicode作为内存编码,简称内码。将文本保存在python解释器内存中、输出到屏幕、编辑器或保存为文件时,应将内部代码转换为utf8或gbk。类似地,当python解释器从输入设备接收文本或从文件中读取文本时,它必须将utf8或gbk转换为unicode编码格式。
所以不管是py2还是py3,如果要在unicode、utf8、gbk等编码格式之间转换,一般如下图:
我们很困惑,因为py2和py3给这些编码格式起了令人困惑的名字。
py2有两种类型的字符串:unicode类型和str类型。
py2的unicode类型是unicode编码,py2的str类型一般是指除unicode编码以外的所有编码,包括ascii编码、utf8编码、gbk编码、cp936编码等。
py3还有两种类型的字符串:bytes类型和str类型。py3的str类型是unicode编码,bytes类型一般是指除unicode编码以外的所有编码,包括ascii编码、utf8编码、gbk编码、cp936编码等。
是同一个str类型,在py2和py3中完全颠倒了!下图增加了一点内容,更有助于理解编码问题。
接下来,我们来练习一下。
S=天空是圆的
类型
类别“str”
镜头
七
s
Abc,天空是圆的
印刷品
Abc天元本地
s . encode(“unicode-escape”)
B ABC \ \ U 5929 \ \ U 5706 \ \ U 5730 \ \ u65b 9 不管字符串前面有没有加U,只要字符串前面没有用B,IDLE中定义的字符串就是unicode编码,也就是py3的class str ,它的长度是字符数而不是字节数。我们将unicode字符串“天空是圆的”转换为utf8编码:
s_utf8=s.encode(utf8 )
类型(s_utf8)
类“字节”
len(s_utf8)
15
s_utf8
b ABC \ xe5 \ xa4 \ xa9 \ xe5 \ x9c \ x86 \ xe5 \ x9c \ xb0 \ xe6 \ x96 \ xb9
打印(s_utf8)
b ABC \ xe5 \ xa4 \ xa9 \ xe5 \ x9c \ x86 \ xe5 \ x9c \ xb0 \ xe6 \ x96 \ xb9
s_utf8.decode(utf8 )
abc天地’的utf8代码是字节类型(字节码),长度是字节数。我们将unicode字符串“天空是圆的”转换为gbk编码:
s_gbk=s.encode(gbk )
类型(英国)
类“字节”
len(英镑)
11
s_gbk
b ABC \ xcc \ xec \ xd4 \ xb2 \ xb5 \ xd8 \ xb7 \ xbd
打印(英国)
b ABC \ xcc \ xec \ xd4 \ xb2 \ xb5 \ xd8 \ xb7 \ xbd
s_gbk.decode(s_gbk )
abc天地’的gbk码也是字节型(字节码),长度也是字节数。让我们看看不同代码的字节码是否可以连接起来:
ss=s_utf8 s_gbk
悬浮物
b ABC \ xe5 \ xa4 \ xa9 \ xe5 \ x9c \ x86 \ xe5 \ x9c \ xb0 \ xe6 \ x96 \ xb9 ABC \ xcc \ xec \ xd4 \ xb2 \ xb5 \ xd8 \ xb7 \ xbd
ss.decode(utf8 )
回溯(mostrecentcalllast):
文件 pyshell#64 ,第1行,在模块中
ss.decode(utf8 )
unicode decodedeerror : utf-8 codec can tdecodebyte 0 xccinposition 18: invalidcontinuationbyte
ss.decode(gbk )
953
ss.decode(utf8 ,忽略)
Abc,天空是圆的,abc
ss.decode(gbk ,忽略)
从“ABC”可以看出
热门IT软件开发工作室,免费在线学习python平台,欢迎关注!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。