持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
0 环境
- 系统环境:win10
- 编辑器:IDEA
- python版本:3.9.6
1 概念
string和bytes都是序列,一个是文本,而另一个是字节。
2 区别
字节没有编码,而文本有编码,比如:gbk,utf8等,文本的编码指的是什么,字符如何使用字节来表示。编码就是对一个形态转变成另一种形态的过程,有种初中物理水的概念,低温就是冰,高温就是水蒸气,反过来也是可以的。
3 编码
python3开始,字符串默认编码是utf-8。
utf-8编码表示的字节:
def str_bytes_demo():
s = "你是kitty"
print(type(s))
print(s.encode())
if __name__ == '__main__':
str_bytes_demo()
每个字符三个字节。
如果gbk是我们的编码字符集;s.encode('gbk'),加个gbk的标注即可(两个字节),当然结果也不同了。
既然可以编码,那么就可以解码。比如解码偶尔会伴随着乱码的存在,比如我是utf8格式的,三个字节,然后你把它转为gbk,也就是2个字节, 肯定就不对应了。正常中文是采用utf8三个字节表示的。
4 场景
为啥要编码,解码呢,总得有用处吧,比如服务器是utf-8,客户端是gbk,相互通讯,是不是要转化为字节,对于双方来讲都没有影响,很快乐的通讯,兼容的快乐。python3的socket只能用bytes。
5 总结
我们知道了string和bytes的概念,不同的形式,这种方式解决了大家相互无障碍通讯,那种乱码难熬的痛苦,别人发给你gbk格式的代码,然后你是utf8格式,不同格式的字符串,得中文注释全部乱了,你还要转化一下,在复制过来,那种有种语言不通的痛苦就一个人说汉语,另一个人说俄语。现在bytes的出现,完美作为中间的桥梁连接无数个格式,典型的你好我好大家好。