python3 编码问题,python3的编码方式

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: