python笔记 字符串与bytes上

218 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

0 环境

  • 系统环境:win10
  • 编辑器:IDEA
  • python版本:3.9.6

1 概念

string和bytes都是序列,一个是文本,而另一个是字节。

2 区别

字节没有编码,而文本有编码,比如:gbk,utf8等,文本的编码指的是什么,字符如何使用字节来表示。编码就是对一个形态转变成另一种形态的过程,有种初中物理水的概念,低温就是冰,高温就是水蒸气,反过来也是可以的。

3 编码

python3开始,字符串默认编码是utf-8。

utf-8编码表示的字节: image.png

def str_bytes_demo():
    s = "你是kitty"
    print(type(s))
    print(s.encode())

if __name__ == '__main__':
    str_bytes_demo()

每个字符三个字节。

image.png

如果gbk是我们的编码字符集;s.encode('gbk'),加个gbk的标注即可(两个字节),当然结果也不同了。

既然可以编码,那么就可以解码。比如解码偶尔会伴随着乱码的存在,比如我是utf8格式的,三个字节,然后你把它转为gbk,也就是2个字节, 肯定就不对应了。正常中文是采用utf8三个字节表示的。

image.png

4 场景

为啥要编码,解码呢,总得有用处吧,比如服务器是utf-8,客户端是gbk,相互通讯,是不是要转化为字节,对于双方来讲都没有影响,很快乐的通讯,兼容的快乐。python3的socket只能用bytes。

5 总结

我们知道了string和bytes的概念,不同的形式,这种方式解决了大家相互无障碍通讯,那种乱码难熬的痛苦,别人发给你gbk格式的代码,然后你是utf8格式,不同格式的字符串,得中文注释全部乱了,你还要转化一下,在复制过来,那种有种语言不通的痛苦就一个人说汉语,另一个人说俄语。现在bytes的出现,完美作为中间的桥梁连接无数个格式,典型的你好我好大家好。