一. 编码
1. ASCII编码
ASCII是最早的计算机编码,包含了英文字母(大小写),数字,标点等特殊符号,一共128个码位,最多只能用8位来表示(一个字节),ASCLL码最多256个位置,无法提供中国的汉字.
2. GBK编码
GBK是国标码,占两个字节(16位),虽然位置增多了,但还是无法将汉字全部存储.
3. unicode
unicode是万国码,占4个字节(32位),有40多亿个位置,远远大于中国的汉字数.太浪费.
4. utf-8
utf-8是目前使用最多的编码,每个字符至少占8位.
英文:一个字节(8 bit). 欧洲文字:两个字节(16bit). 中文:三个字节(24bit)
二. encode和decode
1. encode()
encode()是编码, 编码之后的数据是bytes类型的数据.格式:b'(英文),b'\x(中文)
a = "hello"
print(a.encode("GBK")) #b'hello'
print(a.encode("ASCII")) #b'hello'
print(a.encode("UTF-8")) #b'hello' b = "今天下雨了"
print(b.encode("GBK")) #b'\xbd\xf1\xcc\xec\xcf\xc2\xd3\xea\xc1\xcb' 10个字节
print(b.encode("ASCII")) #报错
print(b.encode("UTF-8")) #b'\xe4\xbb\x8a\xe5\xa4\xa9\xe4\xb8\x8b\xe9\x9b\xa8\xe4\xba\x86' 15个字节
注:英文编码之后的结果和源字符串一致. 中文编码之后的结果根据编码的不同. 编码结果也不同. 一个中文的UTF-8编码是3个字节. 一个GBK的中⽂文编码是2个字节. ASCII码没有中文.编码之后的类型就是bytes类型.
2. decode()
接收对方的编码,我们得到的也是bytes类型,需要进行解码来获取原来的字符串.decode()是用来解码的.
bs = b'\xbd\xf1\xcc\xec\xcf\xc2\xd3\xea\xc1\xcb' #不要带引号,直接把bytes给赋值
print(bs.decode("GBK")) #今天下雨了
print(bs.decode("UTF-8")) #报错,用什么编码就要用什么解码.
GBK和UTF-8是不可以互相转换的,但是可以通过Unicode来转换.
bs = b'\xbd\xf1\xcc\xec\xcf\xc2\xd3\xea\xc1\xcb' #不要带引号,直接把bites给赋值
a = bs.decode("GBK") #今天下雨了
print(a.encode("UTF-8")) #b'\xe4\xbb\x8a\xe5\xa4\xa9\xe4\xb8\x8b\xe9\x9b\xa8\xe4\xba\x86' 15个字节