A9
代表ascii表中的©,如何将ascii编码中的A9
更改为python中的utf-8编码?将asii编码更改为utf-8的规则是什么?
答案 0 :(得分:11)
任何给定的ASCII码点等于该码点的UTF-8编码。这是故意的。
但是,©
不是ASCII码点,它是 Latin-1 代码点。 ASCII是一个7位标准,代码点从00到7F运行。除此之外,Latin 1 (ISO-8859-1)从U + 0080运行到U + 00FF,每个代码点需要2个UTF-8字节进行编码。
只需从Latin 1解码,编码为UTF-8:
>>> b'\xA9'.decode('latin1').encode('utf8')
b'\xc2\xa9'
关于'规则' UTF-8的最佳解释在UTF-8 Wikipedia article。
对于其值适合单个字节的Latin-1代码点,规则很简单:前2位(10
或11
)构成第一个字节的低两位,与110000
一起作为高位。代码点的低6位被赋予10
作为高位。
A9
或10101001
然后变为11000010 10101001
或C2 A9
:
10 101001 Latin-1 codepoint A9
.. ------
/ \
11000010 10101001 UTF-8 encoding C2 A9
.. ------