Python如何将含\x转义的Unicode字符串转换为对应byte字节串
问题原因
你定义的s_str是带r前缀的原始字符串,内部存储的是\、x、0、0这类字面字符序列,并非转义后的单字节值。使用raw_unicode_escape编码时,会将字符串中的每个字符直接映射为对应字节,其中\对应的字节为\x5c,因此最终结果会出现双反斜杠,本质是输入的字符串本身是转义序列的字面文本,而非已转义的字节表示。
解决方法
提供两种可靠的实现方案:
方案1:转义序列解析法
通过unicode_escape先解析字符串中的\x转义规则,再通过单字节的latin1编码转为目标bytes,latin1为1:1单字节映射,不会修改字节值:
s_str: str = r"\x00\x01\x00\xc0\x01\x00\x00\x00\x04" # 解析\x转义序列 temp_str = s_str.encode("latin1").decode("unicode_escape") # 转换为目标字节 s_bytes = temp_str.encode("latin1")
输出结果:b'\x00\x01\x00\xc0\x01\x00\x00\x00\x04',完全符合需求。
方案2:字面量解析法
使用Python内置的安全字面量解析工具ast.literal_eval,直接将字符串当做bytes字面量解析,安全性和可靠性更高:
from ast import literal_eval s_str: str = r"\x00\x01\x00\xc0\x01\x00\x00\x00\x04" s_bytes = literal_eval(f"b'{s_str}'")
内容的提问来源于stack exchange,提问作者Tereso del Río Almajano
相关产品推荐
相关产品推荐

