str.encode() 给出意想不到的结果
str.encode() giving unexpected results
我一直在使用 python 内置插件,但得到了一些(对我来说)令人困惑的结果。
看看这段代码:
>>> 'ü'.encode()
b'\xc3\xbc'
为什么返回 \xc3\xbc
(十进制的 195 和 188)?如果您查看 ascii table, we see that ü
is the 129'th character. Or if you take a look here,我们会看到 ü
是第 252 个 Unicode 字符,这就是您从
中得到的
>>> ord('ü')
252
那么 \xc3\xbc
是从哪里来的,为什么要分成两个字节?当你解码时:b'\xc3\xbc'.decode()
,它怎么知道这两个字节是一个字符?
在您正在查看的 table 上,您正在查看标题为“扩展 ASCII”的部分,在 ISO/IEC 8859 或 latin1 中更为人所知。 ASCII作为一个字符集,定义了从0到127的7位字符。latin1定义了另外128single-byte个字符,是ASCII的扩展。 Python 使用 UTF-8,它扩展了 ASCII(因此与其兼容)但与 latin1 不兼容。
字符 ü 的 Unicode 代码点为 0xFC(十进制为 252),并且在使用 UTF-8 时使用两个字符进行编码。
很多在线 ASCII table 都弄错了。将代码点称为 128 到 255 个 ASCII 字符是不准确的,因为 ASCII 并未声明为这些代码点分配 any 值。
我一直在使用 python 内置插件,但得到了一些(对我来说)令人困惑的结果。
看看这段代码:
>>> 'ü'.encode()
b'\xc3\xbc'
为什么返回 \xc3\xbc
(十进制的 195 和 188)?如果您查看 ascii table, we see that ü
is the 129'th character. Or if you take a look here,我们会看到 ü
是第 252 个 Unicode 字符,这就是您从
>>> ord('ü')
252
那么 \xc3\xbc
是从哪里来的,为什么要分成两个字节?当你解码时:b'\xc3\xbc'.decode()
,它怎么知道这两个字节是一个字符?
在您正在查看的 table 上,您正在查看标题为“扩展 ASCII”的部分,在 ISO/IEC 8859 或 latin1 中更为人所知。 ASCII作为一个字符集,定义了从0到127的7位字符。latin1定义了另外128single-byte个字符,是ASCII的扩展。 Python 使用 UTF-8,它扩展了 ASCII(因此与其兼容)但与 latin1 不兼容。
字符 ü 的 Unicode 代码点为 0xFC(十进制为 252),并且在使用 UTF-8 时使用两个字符进行编码。
很多在线 ASCII table 都弄错了。将代码点称为 128 到 255 个 ASCII 字符是不准确的,因为 ASCII 并未声明为这些代码点分配 any 值。