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 值。