- 关于字符编码
* Python 2.x默认用ascii编码, Python 3.x默认用utf-8编码
* 1Byte = 8bit,也就是8位,所以1字节最大可以表示的数就是 0b11111111 = 0xff = 255
* 刚开始,ascii用1Byte的七位表示,最多可以表示2**7 = 128个字符,其中0-31及127为通信专用字符,其他为可显示字符。这些包括了英语使用的全部字符。后来其他文字,使用了后边的128个字符,称为扩展字符(扩展ascii码)。
* 但是中文等其他的这么多不够用啊,于是尝试用2Byte2表示一个字符,叫做DBCS(双字节编码方案)
* 最终,美国人提出一种标准,用来展示所有国家的字符,就是***unicode***
* unicode就像是一个电话本,标记着字符和数字之间的映射,例如用Python的函数ord("中")显示出其对应的数字是 20013,使用chr()可以显示出某个数字对应的字符
* Unicode并不涉及字符是怎么在字节中表示的,它仅仅指定了字符对应的数字,仅此而已。
他对支持字符的数量没有限制,也不要求字符必须占两个或者三个或者其他任意字节。
* utf-8和utf-16是两个最流行的unicode编码
* utf-8中,0-127使用1个字节,127以上使用2个,3个或者4个字节表示,能兼容us-ascii
* ###utf-8的原理
1. 单字节的字符,第一位设为0, 对于英文文本,utf-8只占一个字节,和ascii完全相同
2. n个字节的字符(n大于0), 第一个字节的前n为设为1,第n+1位设为0,后边字节的前两位都设为10,这n个字节的其他位填充为该字符的Unicode码,高位0补足
参考 知乎,学点编码知识又不会死
* python3 用bytes("中文", encoding="utf-8")可以获取到对应的编码
- Python关于字符编码的函数
1. ord(char)
获取char对应的unicode映射值
2. chr(pos)
获取pos对应的unicode字符
3. bytes(string, encoding="encode")
用encoding解码string
4. bin(num)
获取num对应的二进制
5. hex(num)
获取num对应的十六进制
6. int(num, base=16)
获取num对应的10进制,base为其原来的进制
7. oct(num)
获取num对应的八进制
-
自定义函数
a = byte("中文", encoding="utf-8") # b'\xe4\xb8\xad\xe6\x96\x87'
# 可以看出utf-8中,一个汉字占3个字节
print(a[0]) # 228 即 int(0xe4)
# \xae是utf-8编码的形式,\x后跟两位的16进制代表一个字节#中文转二进制
网友评论