
类似的问题在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就弄出了这样一个奇葩的兼容性关系来 。
觉得有用的话 , 欢迎关注活在信息时代哦:)
- 2022年已经进入到了尾声|小米13刚发布,中国移动送出喜讯:5G功耗第一,综合评测第一
- 无论是NVIDIAAda还是AMDRDNA3|rx7900xt着色器频率超到3.7ghz
- 13代酷睿目前还没有65WTDP型号的主流产品|绝配12代酷睿华擎迷你准系统到手1279元(1.92L体积)
- 12月14日|oppo第二颗自研芯片将到来,网友猜测可能是手环一类的
- 华擎|绝配12代酷睿 华擎迷你准系统到手1279元(1.92L体积 )
- 很多朋友在提到电竞手机时|联想拯救者Y70体验:电竞手机中的正装野兽
- 最近我们经常遇到这样的购机需求:工作为主|价格真香表现全面的“工作站级设计本”!惠普战99测评
- iPhone|雷军希望的超越苹果做到了!近8成网友认为小米13比iPhone 14 Pro好看
- oppowatch3pro冰川灰上架,到手价1899元
- 苹果手机怎么投屏到windows电脑上?
