Python中无前缀r的字符串变量如何转换为目标bytes字面量?
解决方法
直接使用 latin1 编码对字符串进行编码即可得到目标结果,不需要引入额外依赖,该编码的特性是Unicode码点0-255和单字节值一一对应,不会产生转义或编码损失,完全匹配你的需求场景。
代码示例
# 你的字符串变量 string = 'z\xff\xcaQ\x01\x9b\xe1\xe4\x85\xe4\x1c\xbb\x18yQf\xb0A\x89\xac\x89\x01I\xe2\xec\x06|\x1f\xcf9"\xcf' # 一行代码完成转换 bytes_of_literal = string.encode('latin1') # 验证输出 print(bytes_of_literal) # 输出:b'z\xff\xcaQ\x01\x9b\xe1\xe4\x85\xe4\x1c\xbb\x18yQf\xb0A\x89\xac\x89\x01I\xe2\xec\x06|\x1f\xcf9"\xcf'
额外场景适配
如果你拿到的字符串变量里的转义符是被二次转义的(即实际存储的是 \\xff 两个字符而非\xff单个字符),可以先通过unicode_escape解码还原原始字符再转字节:
bytes_of_literal = string.encode('utf-8').decode('unicode_escape').encode('latin1')
原方法异常原因说明
你之前写的struct循环方法逻辑上和latin1编码是等价的,出现错误输出的根源是你传入的字符串变量本身已经不是预期的原始字符序列,大概率是你在获取该字符串的环节用了utf-8等其他编码解码了原始字节,导致字符码点已经被修改,要彻底避免该问题需要保证你获取字符串变量时是用latin1编码解码原始字节得到的。
内容的提问来源于stack exchange,提问作者Mohammad Saeidi
相关产品推荐
相关产品推荐

