Python 3中如何将含转义字节的字符串编码为等效字节字面量?
解决Python 3中生成OSC格式字节数据的问题
问题原因
你遇到的双反斜杠问题,根源在于原始字符串(带r前缀)不会解析转义序列。比如r"\x00"会被当成普通的四个字符(\、x、0、0),调用encode()后,这些字符会被编码成对应的字节,自然就出现了双反斜杠对应的字节值,而不是你需要的空字节(\x00)。
可行解决方法
以下是两种直接有效的处理方式:
方法1:使用codecs.escape_decode解析转义序列
这个方法专门用于解析字符串中的转义字符,将其转换为对应的字节:
import codecs # 你的原始字符串 raw_str = r"tracking/trackers/head/position\x00\x00\x00\x00" # 解析转义序列,生成目标字节对象 target_bytes = codecs.escape_decode(raw_str)[0] # 验证结果 print(target_bytes == b'tracking/trackers/head/position\x00\x00\x00\x00') # 输出True
方法2:使用ast.literal_eval模拟字节字面量解析
通过将字符串包装成字节字面量的格式,让Python解析器直接处理转义序列:
import ast raw_str = r"tracking/trackers/head/position\x00\x00\x00\x00" # 构造字节字面量的字符串形式 byte_literal_str = f"b'{raw_str}'" # 解析生成字节对象 target_bytes = ast.literal_eval(byte_literal_str) # 验证结果 print(target_bytes == b'tracking/trackers/head/position\x00\x00\x00\x00') # 输出True
注意事项
- 如果你的文本文件中存储的是已经包含转义序列的内容(比如每行都是类似
tracking/trackers/head/position\x00\x00\x00\x00的文本),读取文件时不要使用r模式,直接按普通文本读取后,用上述方法处理即可。 - 对于OSC数据,确保最终字节对象符合OSC的格式规范,比如字符串必须以空字节填充到4字节的倍数(你的示例已经满足)。
内容的提问来源于stack exchange,提问作者Logic1
相关产品推荐
相关产品推荐

