码迷,mamicode.com
首页 > 编程语言 > 详细

python2与python3的bytes问题

时间:2018-11-07 23:08:29      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:not   nic   color   展示   位置   本质   数据   常见   2008年   

>>> s  = 编程
>>> print s
编程
>>> s
\xe7\xbc\x96\xe7\xa8\x8b
>>>

在python2中直接调用字符串的变量的话,会打印其bytes(可以理解成用16进制表示字符串的内存地址,本质还是二进制)。在python2中,bytes和str是一回事。

为什么要有个bytes呢?。因为所有数据本质都是用二进制进行储存的,当传输数据的时候,要把这些数据先转换成二进制( bytes)在进行传输。除此之外,python2里还有个单独的数据类型,把字符串解码后,就会变成unicode。

>>> s
\xe8\xb7\xaf\xe9\xa3\x9e #utf-8
>>> s.decode(utf-8)
u\u8def\u98de #unicode 在unicode编码表里对应的位置
>>> print(s.decode(utf-8))
路飞 #unicode 格式的字符

原因是python2的默认编码是ASCII,后来为了支持多国语言,就想弄个unicode。但是直接把ASCII转成unicode是很费劲的,所以龟叔直接搞了一个新的字符类型,就叫unicode,说白了就是你得在内存里先把字符串存成unicode类型

 

2008年python3出世,来了个大变革:

  1. 把字符串的编码变成了unicode,文件默认编码变成了utf-8。
  2.  把str 和bytes 做了明确区分, str 就是unicode格式的字符, bytes就是单纯二进制

还有一个很重要的是,在python3中,只有unicode给你展示字形,其他的编码一律用bytes展示,也就是说要你强制使用unicode。

 

最后再提示一下,Python只要出现各种编码问题,无非是哪里的编码设置出错了
常见编码错误的原因有:

      • Python解释器的默认编码
      • Python源文件文件编码
      • Terminal使用的编码
      • 操作系统的语言设置

 

参考:https://www.cnblogs.com/alex3714/articles/7550940.html

python2与python3的bytes问题

标签:not   nic   color   展示   位置   本质   数据   常见   2008年   

原文地址:https://www.cnblogs.com/lshedward/p/9926150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!