我有一个设备,返回一串UTF-8编码的字符。我只能逐字节读取,并且读取以值为0x00的字节终止。
我正在编写Python 2.7函数,供他人访问我的设备并返回字符串。
在之前的设计中,当设备仅返回ASCII时,我在循环中使用了以下代码:
我正在编写Python 2.7函数,供他人访问我的设备并返回字符串。
在之前的设计中,当设备仅返回ASCII时,我在循环中使用了以下代码:
x = read_next_byte()
if x == 0:
break
my_string += chr(x)
其中 x 是从设备读取的最新字节值。
现在设备可以返回一个 UTF-8 编码的字符串,但我不确定如何将返回的字节转换为 UTF-8 编码的字符串/Unicode。
chr(x)
当 x>127 时会导致错误,因此我认为使用 unichr(x)
可能会起作用,但这假定传递的值是完整的 Unicode 字符值,而我只有 0-255 的一部分。
那么我该如何将从设备获取的字节转换为可用于 Python 的字符串并仍然处理完整的 UTF-8 字符串呢?
同样地,如果我在 Python 中获得了一个 UTF-8 字符串,我该如何将其拆分成单个字节以发送到我的设备并仍然保持 UTF-8 呢?
my_bytes = bytearray(my_string, 'utf-8')
然后只需循环遍历my_bytes
来发送单个字节。 - Willmy_string.encode('utf-8')
更加直观(这会得到bytes
,在Py3中表现得像不可变的bytearray
);但在Py2中,encode
会得到str
,它按其字符的长度1迭代str
,而不是从0-255迭代int
。无论哪种方式,您都可以迭代结果并调用写入函数:for b in bytearray(my_string, 'utf-8'): write_one_byte(b)
。 - ShadowRanger