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.
但 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.
所以基本上这是 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()。
查看 Python 2.7:
中的chr
文档
Return a string of one character whose ASCII code is the integer i.
但 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.
所以基本上这是 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()。