首页 > 解决方案 > python 2中的chr表现得很奇怪

问题描述

查看Python 2.7chr中的文档:

返回一个字符的字符串,其 ASCII 码是整数 i。

资源

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

> chr(181)
'\xb5

这很令人惊讶,我预计会出错。我现在就接受这个。

Python 3.7中:

返回表示其 Unicode 代码点为整数 i 的字符的字符串。

资源

所以基本上这是unichr在 Python 2.7 中。

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)以及它如何实际输出似乎是部分正确的编码。

标签: pythonpython-2.7asciipython-unicode

解决方案


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

文档中:
返回一个字符的字符串,其 ASCII 码是整数 i。例如,chr(97) 返回字符串 'a'。这是 ord() 的倒数。参数必须在 [0..255] 范围内,包括在内;如果 i 超出该范围,将引发 ValueError。另请参见 unichr()。


推荐阅读