python - 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)
以及它如何实际输出似乎是部分正确的编码。
解决方案
因为chr()
接受 0..255 的范围。
从文档中:
返回一个字符的字符串,其 ASCII 码是整数 i。例如,chr(97) 返回字符串 'a'。这是 ord() 的倒数。参数必须在 [0..255] 范围内,包括在内;如果 i 超出该范围,将引发 ValueError。另请参见 unichr()。
推荐阅读
- python-3.x - 将 Entry 小部件中的文本值存储到变量时出现意外输出
- python - Python中的多进程执行器
- python - 如果一个值重复,如何取熊猫列的平均值?
- c++ - 如何真正区分编译时间和运行时间信息?
- elasticsearch - Elasticsearch、Kibana、Vega Sankey - 自定义查询以仅针对 Top Talker IP 地址显示 Sankey
- flutter - 有人可以解释这个陈述形式吗?
- javascript - 反应原生的圆形滑块
- swift - 无法运行使用颤振开发的 iOS 应用程序
- flutter - Flutter:是否可以有多个 CameraController?
- cmd - cmd 在其他控制台中运行部分脚本