【问题标题】:chr in python 2 is acting strangepython 2中的chr表现得很奇怪
【发布时间】:2020-07-05 14:33:58
【问题描述】:

查看 Python 2.7 中的chr 文档:

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

source

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

> chr(181)
'\xb5

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

Python 3.7 中:

返回代表字符的字符串,其 Unicode 代码点是整数 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) 上中断,以及它如何实际输出似乎部分正确的编码。

【问题讨论】:

    标签: python python-2.7 ascii python-unicode


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!但是......那不是ASCII。这也是 py 2 和 3 之间的一个很大区别,对此并不感到惊讶。另外,py2 返回的部分结果是什么?
    • 它只是返回十六进制的数字!十六进制(181)= 0xb5
    • 非常感谢。这确实很奇怪。我会接受这个作为答案。但是,如果您或任何正在阅读的人有关于此历史或设计决策的信息、电子邮件线程之类的信息,我将非常感兴趣并非常感激。
    • 可能与 unicode 的向后兼容性有关,因此吞吐量仍然适用于 UTF-8 并且不会崩溃。
    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    相关资源
    最近更新 更多