类似的问题在Python2到Python3的升级中也有一个 。 那就是字符串的类型 。
在Python2里 , 字符串序列有两种:str和Unicode 。 这里面str的编码是和解释器有关的 , 可以简单粗暴的理解为“系统用的编码” , 如果系统编码是GBK的 , 那么str的编码就是GBK 。 而Unicode编码则是正常的Unicode编码 。 在Python2编码的时候 , 如果正常写一个字符串 , 例如:
‘this is a test.’
这个字符串默认就是str的 。 如果在前面加一个u , 即
u‘this is a test.’
那么这个编码就变成了Unicode的 。
然而在Python3里 , 同样也有两种字符序列类型 , str和bytes 。 这里面的str即为Unicode , 就是说Python2里面的Unicode类型 , 在Python3里没有了 , Python3里随便写一个字符串 , 例如:
‘this is a test.’
【Python|Python2到Python3的奇葩字符串问题,小心踩坑哦】就是Python2里的Unicode类型 , 和Python2里面的前面加个u的类型是一样的 。
而Python3里面的bytes则和Python2里面的str很类似 。 都包含原始的8位值【即一个字节码由8个二进制位组成】 。 所以我们基本上可以得出下图的对应关系:
而在Python3里 , 想要用到bytes类型 , 则需要在字符串前面加上一个b 。 像这样:
b‘this is a test.’
很奇怪是不是 , 那么为什么Python要做这么奇葩的事情呢?原因在于 , 随着计算机硬件的发展 , 原来系统开销较大的Unicode已经从当时的小众变成了大众 。 而原来的各种编码则在应用中从大众变成了小众 。
就好像原来大家都穷 , 吃的都是小米饭 , 吃碗白米饭要发个朋友圈 。 后来大家都吃上了白米饭 , 反而吃一次小米饭成了养生了 , 发个朋友圈一样 。
所以为了更符合大众的实际应用习惯 , Python就弄出了这样一个奇葩的兼容性关系来 。
觉得有用的话 , 欢迎关注活在信息时代哦:)
- 下乡免费赠送净水器,数量限制30台?送到门口的骗局你了解吗?
- 特斯拉|活到老,生到老,特斯拉CEO 父亲喜当爹,母亲竟是小41岁的继女
- 红米手机|红米K40S这款手机到底值不值得买?
- 盗版|百度下场打击,网文反盗版战争的拐点或已到了
- 二手也卖到缺货?华为上架两年前手机,搭载麒麟芯片!
- 小米科技|又一台小米10?Nothing Phone(1)尝鲜用户吐槽遇到绿屏和葫芦屏
- 数据线|无数据线!文件无压缩!将手机内容传输到电脑上!
- 华为|想换机别着急,五款新机已得到曝光,华为、200W快充都在内了
- iphone15|电脑“我的文档”在哪里找?可尝试这几种方法,即可轻松找到它
- 芯片|雷军也很无奈,12GB+512GB从6999下放到4999,高端机不值钱了