如何将存储为普通字符串的Python字节字面量转为bytes对象?
将字符串形式的字节表示转换为bytes对象
推荐方案:使用ast.literal_eval
这是最安全、通用的处理方式,它仅解析Python字面量结构,不会执行任意代码,彻底避免了代码注入风险。示例代码:
import ast byte_str = "b'moose'" byte_obj = ast.literal_eval(byte_str) print(type(byte_obj)) # 输出 <class 'bytes'> print(byte_obj) # 输出 b'moose'
该方法还能正确处理带转义序列的复杂场景,比如byte_str = "b'm\\x6fose'",转换后会得到正确的b'mose'。
局限性较大的手动处理方式
如果你的字符串格式完全固定(始终以b'开头、'结尾,且无复杂转义字符),可以手动截取内容后编码,但这种方法仅适用于简单场景:
byte_str = "b'moose'" raw_content = byte_str[2:-1] byte_obj = raw_content.encode('utf-8')
一旦原字符串包含\\x、\\n这类转义序列,手动处理会生成错误的bytes对象,因此不推荐作为通用方案。
绝对避免使用eval
eval虽然能实现转换,但会执行任意传入的代码,若输入来自不可信来源(比如用户输入),会引发严重的安全风险。例如:
# 危险!禁止用eval处理不可信输入 byte_str = "b'__import__('os').system('rm -rf /')'" eval(byte_str) # 会执行恶意系统命令
内容的提问来源于stack exchange,提问作者greenberet123
相关产品推荐
相关产品推荐

