python中字符串的编码和解码
1. 常⽤的编码
ASCII:只能表⽰⼀些字母,数字和特殊的字符,占⼀个字节
GBK:国家简体中⽂字符集和繁体字符集,兼容ASCII,占两个字节
Unicode:能够表⽰全世界上所有的字符,Unicode有⼈说占4个字节也有⼈说占2个字节,但中⽂占2个字节
UTF-8:Unicode的压缩版,占1~3个字节,其中中⽂占三个字节
2.补充:计算机表⽰的单位:
bit: 位,计算机最⼩的表⽰单位
bytes:字节,最⼩的存储单位,1bytes=8bit,1bytes简写成1B
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
......
3.ASCII编码
ASCII编码是基于拉丁字母⼀套编码,主要是显⽰现代英语和其西欧语⾔,是最早通⽤的单字节编码系统,具体ASCII对照表如下:
在对照表中需要记住的是⼤写字母A的编码是65,⼩写字母a的编码的97即可。
在python中可以使⽤chr和ord⽅法进⾏转换:
# 将数字类型转换成ASCII对应的字符
print(chr(97))  # a
# 将数字转换成对应的数据
print(ord("A"))  # 65
# 或者使⽤
但随着事件的发展,ASCII编码扩展到了256个字符,编码 对照表如下:
其中后128个字符称为扩展ASCII码
2.GBK和GB2312编码
由于ASCII编码只能由256个字符组成,然只能由1个字节来表⽰中⽂是不可能的,因此制定了GB2312编码,⽤来表⽰中⽂的对照表
4.Unicode
为了解决各个国家编码冲突的问题,Unicode编码就因此⽽⽣,Unicode把所有语⾔都统⼀到⼀套编码⾥⾯,就会避免冲突,产⽣乱码。
Unicodeb标准在不断发展,最常⽤的是⽤两个字节表⽰⼀个字符,也有的字符是4个字节,但是中⽂是占两个字节。如果统⼀成Unicode编码,在存储和传输上就不划算5.UTF-8编码
为了解决Unicode编码存储过⼤的问题,就推出了可变长编码UTF-8,UTF-8编码把⼀个Unicode字符依据不同的数据⼤⼩编程1~6个字节,其中中⽂就占3个字节
数字转unicode编码
6.编码和解码
1.编码操作
可以通过encode进⾏编码,其中语法如下:
对字符串进⾏ASCII编码(只能转换数字,英⽂字母和⼀些符号)
# ⽅式1:通过bytes⽅法
bytes('a', 'ASCII')
# ⽅式2:  通过encode⽅法进⾏
'a'.encode('ASCII')
将字符串转换成gbk编码格式
# ⽅式1:  通过encode⽅法进⾏
print('你好'.encode('GBK'))  # 编码之后的结果为:b'\xc4\xe3\xba\xc3'
# ⽅式2: 通过bytes类型
print(bytes('我爱你', 'GBK'))  # 编码之后的结果为:b'\xce\xd2\xb0\xae\xc4\xe3'
将字符串转换成Unicode编码格式
# ⽅式1:  通过encode⽅法进⾏
print('你好'.encode('unicode_escape'))  # 编码之后的结果为:b'\\u4f60\\u597d'
# ⽅式2: 通过bytes类型
print(bytes('我爱你', 'unicode_escape'))  # 编码之后的结果为:b'\\u6211\\u7231\\u4f60'
将字符串转换成UTF-8编码格式
# ⽅式1:  通过encode⽅法进⾏
print('你好'.encode('utf-8'))  # 编码之后的结果为:b'\xe4\xbd\xa0\xe5\xa5\xbd'
# ⽅式2: 通过bytes类型
print(bytes('我爱你', 'utf-8'))  # 编码之后的结果为:b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'
2.解码操作
将GBK编码格式转换成字符串
# 通过decode⽅法解码
print(b'\xc4\xe3\xba\xc3\xce\xd2\xb0\xae\xc4\xe3'.decode('GBK'))  # 解码之后结果为:你好我爱你
将UTF-8编码格式转换成字符串
# 通过decode⽅法解码
print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'.decode('utf-8'))  # 解码之后结果为:你好我爱你将Uniconde编码格式转换成字符串
# 通过decode⽅法解码
print(b'\\u4f60\\u597d\\u6211\\u7231\\u4f60'.decode('GBK'))  # 解码之后结果为:你好我爱你

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。