看这个教程 学习python中,在字符编码这一章边看边想,做点记录。
(python 3)
引用:...
在最新的Python 3版本中,字符串是以Unicode编码的
对于单个字符的编码,Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:
>>> ord('A') 65 >>> ord('中') 20013
如果知道字符的整数编码,还可以用十六进制这么写str
:
>>> 'u4e2du6587' '中文'
(由于Python的字符串类型是str
,在内存中以Unicode表示)
以Unicode表示的str
通过encode()
方法可以编码为指定的bytes
,例如:
>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'xe4xb8xadxe6x96x87'
(在bytes
中,无法显示为ASCII字符的字节,用x##
显示。)
...
注意到,
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
'中' | 无 |
(01001110 00101101)b <=> 0x4e2d (注:0xe4b8 <=> 1110 0100 1011 1000 ) |
11100100 10111000 10101101 |
想错了。。本来一看这个排序好像有点反过来的意思,然而并不是,'xe4xb8xadxe6x96x87' 是已经转换成UTF-8了。。已经划掉,无视就好。。
好那就进入UTF-8环节:
UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,'中' 就变成了0xe4b8ad(见上表)
从这里 可以看到UTF-8的编码规则,其中三字节的规则是
3字节 1110xxxx 10xxxxxx 10xxxxxx
直接来检验一下:
把 xxx换成'中'的Unicode [ 0100 111000 101101 ], 并分段填入
得到 11100100 10111000 10101101
与'中'的UTF-8码(见上表)相同。
OK回去继续学习