编码的起源
1、计算机的存储方式为二进制字节
2、所以需要一种映射的方式将二进制字节映射成世界上的各种符号(字符)
3、最早ASCII码将字符对应到二进制字节上。ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。比如一个一个ASCII码65(十六进制41),我们知道它对应的是字符A
4、但是日韩中文字符很多,ASCII码仅仅能够表示有限的字符,不够用,于是出现了unicode码,Unicode是一个以’U+’字符开头,后面跟着4位或者5位或者6位十六进制数字,下图是6中字符的Unicode码
二进制字节 ------------》unicode码--------------》字符
其中:
二进制字节上 ------------》unicode码:映射方式有UTF-16、UTF-32,UTF-8。
字符编码之ASCII、UTF-8、UTF-16的区别
https://www.zhihu.com/question/23374078
Unicode 是「字符集」
UTF-8 是「编码规则」
python的encode和decode
之前说过Unicode将所有的字符都对应上了相应的码点(即unicode码),而UTF-8或者ASCII码不过是对应从Unicode到字节的映射方式,既然有映射方式,那么就有映射方向。我们把从Unicode到字节码(byte string)称之为encode,把从字节码(byte string)到Unicode码称之为decode
>>> s='中国'
>>> len(s)
6
>>> s.decode('utf-8')
u'\u4e2d\u56fd'
>>> s_decode=s.decode('utf-8')
>>> len(s_decode)
2
>>> s_decode.encode('utf-8')
'\xe4\xb8\xad\xe5\x9b\xbd'