请改用该chr()
功能;您发送的值小于 256 但大于 128,但正在创建 Unicode 字符。
然后必须首先对 unicode 字符进行编码以获得字节字符,并且该编码失败,因为您使用的值超出了 ASCII 范围 (0-127):
>>> str(unichr(169))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa9' in position 0: ordinal not in range(128)
这是正常的 Python 2 行为;尝试将 unicode 字符串转换为字节字符串时,必须进行隐式编码,并且默认编码为 ASCII。
如果要chr()
改用,则创建一个包含一个字符的字节字符串,并且不必进行隐式编码:
>>> str(chr(169))
'\xa9'
您可能想要研究的另一种方法是struct
module,特别是如果您需要发送大于255 的整数值:
>>> struct.pack('!H', 1000)
'\x03\xe8'
例如,上面的示例将整数打包成网络字节顺序的无符号短整数。