编辑:我在谈论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
的所有函数都是返回十六进制值?
答案 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()。