Python中chr(128).. chr(255)的要点是什么?

时间:2014-11-19 23:46:43

标签: python ascii

编辑:我在谈论Python 2.7中的行为。

chr函数将0到127之间的整数转换为ASCII字符。 E.g。

>>> chr(65)
'A'

我知道这在某些情况下是如何有用的,我理解为什么它涵盖了0..127,7位ASCII范围。

该函数还接受128..255的参数。对于这些数字,它只返回参数的十六进制表示。在此范围内,根据ISO-8859标准的哪个部分使用,不同的字节意味着不同的东西。

我理解chr是否接受了另一个论点,例如

>>> chr(228, encoding='iso-8859-1') # hypothetical
'ä'

然而,没有这样的选择:

chr(i) -> character

Return a string of one character with ordinal i; 0 <= i < 256.

我的问题是:ValueError而不是i > 255提出i > 127有什么意义? 128 <= i < 256的所有函数都是返回十六进制值?

3 个答案:

答案 0 :(得分:8)

在Python 2.x中,str是一个字节序列,因此chr()返回一个字节的字符串并接受0-255范围内的值,因为这是可以的范围由一个字节表示。当您使用128-255范围内的字节打印字符串的repr()时,字符将以转义格式打印,因为没有标准方法来表示此类字符(ASCII仅定义0-127)。您可以使用unicode()将其转换为Unicode,并指定源编码:

unicode(chr(200), encoding="latin1")

在Python 3.x中,str是一系列Unicode字符,而chr()则需要更大的范围。字节由bytes类型处理。

答案 1 :(得分:0)

我看到你在说什么,但这不正确。在Python 3.4 chr中记录为:

  

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

以下是一些例子:

>>> chr(15000)
'㪘'
>>> chr(5000)
'ᎈ'

在Python 2.x中它是:

  

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

函数chr已经在Python中存在了很长时间,我认为对各种编码的理解仅在最近的版本中得到了发展。从这个意义上讲,支持基本的ASCII表并返回128 - 255范围内的扩展ASCII集的十六进制值是有意义的。

偶数within Unicode ASCII集只定义为128个字符,而不是256个字符,因此没有(不是)标准和接受的方式让ord()返回这些输入的答案值。

答案 2 :(得分:0)

请注意,python 2字符串处理已被破坏。这是我建议切换到python 3的原因之一。

在python 2中,字符串类型被设计为表示文本和二进制字符串。因此,chr()用于将整数转换为字节。它与文本,ASCII或ISO-8859-1无关。它是二进制字节流:

 binary_command = chr(100) + chr(200) + chr(10)
 device.write(binary_command)
 etc()

在python 2.7中,添加了bytes()类型以与python 3向前兼容,并且它映射到str()。