类似的问题在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.’
就是Python2里的Unicode类型 , 和Python2里面的前面加个u的类型是一样的 。
而Python3里面的bytes则和Python2里面的str很类似 。 都包含原始的8位值【即一个字节码由8个二进制位组成】 。 所以我们基本上可以得出下图的对应关系:
而在Python3里 , 想要用到bytes类型 , 则需要在字符串前面加上一个b 。 像这样:
b‘this is a test.’
很奇怪是不是 , 那么为什么Python要做这么奇葩的事情呢?原因在于 , 随着计算机硬件的发展 , 原来系统开销较大的Unicode已经从当时的小众变成了大众 。 而原来的各种编码则在应用中从大众变成了小众 。
就好像原来大家都穷 , 吃的都是小米饭 , 吃碗白米饭要发个朋友圈 。 后来大家都吃上了白米饭 , 反而吃一次小米饭成了养生了 , 发个朋友圈一样 。
所以为了更符合大众的实际应用习惯 , Python就弄出了这样一个奇葩的兼容性关系来 。
觉得有用的话 , 欢迎关注活在信息时代哦:)
- 酷睿处理器|Acer杀疯了!12代酷睿轻薄本3999元到手,2K高分屏、1.25公斤
- 红米手机|红米K40S这款手机到底值不值得买?
- 联发科|清华同方然14锐龙版评测:不到3K的高性价比生产力平台
- 数据线|无数据线!文件无压缩!将手机内容传输到电脑上!
- 小米科技|雷军也很无奈,12GB+512GB从6999下放到4999,高端机不值钱了
- iphone15|电脑“我的文档”在哪里找?可尝试这几种方法,即可轻松找到它
- iqoo|200W快充时代即将到来:iQOO9:我只想“体面”点离开!
- |传英特尔将提高酷睿和至强处理器售价,上调幅度为10%到20%
- 红米手机|两款价格不超过2000的手机,它们把性价比做到了极致
- 华为|华为增程式汽车和比亚迪DMi汽车到底哪个更好?分析告诉你