如何将Python中格式为字节字面量的字符串转换为bytes类型?
Python 字节字面量格式字符串转原生bytes的解决方案
你当前拿到的字符串是Python bytes 对象的字面量表示(即对bytes对象执行repr()后得到的字符串结果),直接调用encode()方法会对字符串的所有字符逐字编码,因此会额外生成外层b'、'对应的字节,以及把原转义符\做二次转义,和预期结果不符。
推荐解决方案:使用ast.literal_eval(安全)
该方法会直接解析Python字面量语法,不需要手动处理字符串格式,也不会像eval()一样存在任意代码执行风险,是最稳妥的方案。
import ast # 你的原始字符串,类型为str str_data = "b'\\xa1\\xc9\\x1c\\xe29\\xc5]\\x02\\xaerZ\\xfaC'" # 解析为bytes类型 bytes_data = ast.literal_eval(str_data) print(type(bytes_data)) # 输出: <class 'bytes'> print(bytes_data) # 输出: b'\xa1\xc9\x1c\xe29\xc5]\x02\xaerZ\xfaC'
备选方案:手动裁剪前后缀+转义编码
如果你能100%确定输入字符串的格式固定为b'xxx'或者b"xxx"的格式,也可以手动裁剪掉外层的标识字符后用raw_unicode_escape编码得到结果:
str_data = "b'\\xa1\\xc9\\x1c\\xe29\\xc5]\\x02\\xaerZ\\xfaC'" # 裁剪掉开头的b'和结尾的',如果是双引号包裹保持s[2:-1]即可 inner_str = str_data[2:-1] bytes_data = inner_str.encode('raw_unicode_escape') print(bytes_data) # 输出: b'\xa1\xc9\x1c\xe29\xc5]\x02\xaerZ\xfaC'
该方案需要严格匹配输入字符串的前后缀格式,如果输入存在引号嵌套、前后缀不统一的情况会解析失败,仅在你能完全控制输入格式的场景下使用。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

