编辑:我说的是Python2.7中的行为。
chr函数将0到127之间的整数转换为ASCII码字符。例如。
>>> 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.我的问题是:为i > 255而不是i > 127提升ValueError的意义是什么?函数对128 <= i < 256所做的一切就是返回十六进制值?
发布于 2014-11-20 07:59:46
在Python2.x中,str是一个字节序列,所以chr()返回一个字节的字符串并接受0-255范围内的值,因为这是一个字节可以表示的范围。当您打印字节在128-255范围内的字符串的repr()时,字符将以转义格式打印,因为没有标准方法来表示此类字符(ASCII码仅定义0-127)。但是,您可以使用unicode()将其转换为Unicode,并指定源编码:
unicode(chr(200), encoding="latin1")在Python3.x中,str是一个Unicode字符序列,而chr()使用的范围要大得多。字节由bytes类型处理。
发布于 2014-11-20 08:00:01
我知道你在说什么,但这不正确。在Python3.4中,chr被记录为:
返回表示其Unicode代码点为整数i的字符的字符串。
下面是一些例子:
>>> chr(15000)
'㪘'
>>> chr(5000)
'ᎈ'在Python 2.x中,它是:
返回一个字符组成的字符串,其ASCII码是整数i。
chr函数在Python语言中已经存在了很长一段时间,我认为对各种编码的理解是在最近的版本中才发展起来的。从这个意义上说,支持基本ASCII表并返回128 - 255范围内的扩展ASCII集的十六进制值是有意义的。
即使是ASCII码集也只被定义为128个字符,而不是256个字符,因此没有(过去没有)一种标准的、可接受的方式让ord()为这些输入值返回答案。
发布于 2014-11-20 08:32:29
请注意,python 2字符串处理已中断。这也是我推荐改用python 3的原因之一。
在python 2中,string类型被设计为同时表示文本和二进制字符串。因此,chr()用于将整数转换为字节。它实际上与文本、ASCII或ISO-8859-1无关。它是一个二进制字节流:
binary_command = chr(100) + chr(200) + chr(10)
device.write(binary_command)
etc()在python2.7中,添加bytes()类型是为了与python3向前兼容,并将其映射到str()。
https://stackoverflow.com/questions/27029241
复制相似问题