python 2 中的 chr 表现得很奇怪

chr in python 2 is acting strange

查看 Python 2.7:

中的 chr 文档

Return a string of one character whose ASCII code is the integer i.

source

但 ASCII 码在 128 范围内。然而在 Python 2.7 中,我有:

> chr(181)
'\xb5

这太令人惊讶了,我预计会出现错误。我暂时接受这个。

Python 3.7:

Return the string representing a character whose Unicode code point is the integer i.

source

所以基本上这是 Python 2.7 中的 unichr

Python 3.7:

> chr(181).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\xb5' in position 0: ordinal not in range(128)

这是预期的,然后:

> chr(181).encode('utf8')
b'\xc2\xb5'

请注意我们有 \xb5 的共同点。

问题:

为什么 Python 2.7 没有在 chr(181) 上中断,为什么它实际上输出了似乎是部分正确的编码。

因为 chr() 接受范围 0..255.

来自documentation
Return一个字符串,其ASCII码为整数i。例如,chr(97) returns 字符串 'a'。这是 ord() 的逆函数。参数必须在 [0..255] 范围内,包括在内;如果 i 超出该范围,将引发 ValueError。另见 unichr()。