本篇主要讲的是python字符编码问题,包括ASCII发展史以及编码和解码的相关操作。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!
01:常见的几个相关概念
1)位:bit,计算机的最小单位二进制中的一位。用二进制的0/1表示。
2)字节:byte,八位就是一个字节。一个字节最多有256种组合方式:2^8。
3)字符:肉眼可见的文字与符号。一个汉字、字母、标点符号都是一个字符。
4)字符集:字符的集合。
5)编码:encode将字符转换为计算机可识别的0/1代码。
6)解码:decode将计算机表示的0/1编码转换为肉眼可见的字符。
7)注意:一个汉字算2个英文字符,指的是占用的内存空间
02:ASCII编码的发展史
编码名称 | 编码特点 | 字符长度 | 表现 |
---|---|---|---|
ASCII | 只能表示英文/数字/控制符等,不能表示中文 | 1个字节 | 字符、阿拉伯数字、大小写字母等 |
GB2312 | 可以表示中文,图形字符等 | 2个字节 | 7000多个简体字等 |
GBK | 兼容GB2312windowns中文版系统的编码 | 2个字节 | 两万多个汉字[包括繁体] |
GB18030 | 1字节与ASCII兼容;2字节与DBK兼容 | 1/2/4个字节 | 70244多个/,各种少数民族字符 |
Unicode | 跨语言跨平台 | 英文1个字节;中文2个字节 | 万国码 |
UTF-8 | 作为Unicode的一种实现方式 | ASCII1个字节;欧洲字符2个字节;中文2/3个字节 | 编码体积大 |
03:查看单个字符的Unicode值(ord、chr)
1)ord()函数获取字符的整数表示 ; chr()函数把编码转换为对应的字符
2)注意:python3中字符串都是用Unicode编码的
print(ord('媛')) #获取字符的整数表示:23195
print(chr(23165)) #编码转换为对应的字符:婽
04:bytes和str
1)python中的字符串类型是str,在内存中以Unicode表示。一个字符对应若干个字节
2)在网络上传输或者保存在磁盘上,就需要把str变为以字节为单位的bytes。用b'字符串'表示。
3)编码:用Unicode表示的str通过encode()方法可以编码为指定的bytes
4)解码:从网络或磁盘读取了字节流,通过decode()方法可以把bytes变为str
5)注意:
①bytes类型的每个字符只占1个字节
②汉字不能直接转换为bytes类型,ASCII码无法直接编译中文
③字符串没有decode方法,需要先encode编码成bytes类型再decode
a=b'ABC!'
print(a)#bytes类型:默认16进制
#注意:encode后面指定的编码方式一定要能编码该字符串
b='我爱python'#str类型
print(b.encode('utf8'))#编码:以utf8的形式编码成bytes类型
print(b'\xe6\x88\x91\xe7\x88\xb1python'.decode('utf8'))#解码
#注意:编码和解码需要一致
c='中国'.encode('utf8')
print(c.decode('gb18030'))#编码和解码不一致会出现乱码:‘涓浗’
print(c.decode('utf8'))#解码:‘中国’
网友评论