Python如何将内容为bytes字面量的网站返回字符串转为bytes类型
你拿到的是bytes类型的Python字面量格式的字符串,需要将其转换为实际的bytes类型,可通过以下两种常用方案实现:
方案1:使用ast.literal_eval(推荐,安全)
ast.literal_eval只会解析Python基础字面量(字符串、数字、bytes、列表、元组等),不会执行任意代码,安全性远高于eval,是这类场景的首选方案。
import ast # 你从网站拿到的字符串 encrypted_text_str = "b'gAAAAABhdoRSo3k8NAXitaA=='" # 转换为bytes类型 encrypted_bytes = ast.literal_eval(encrypted_text_str) print(type(encrypted_bytes)) # 输出: <class 'bytes'> print(encrypted_bytes) # 输出: b'gAAAAABhdoRSo3k8NAXitaA=='
方案2:手动切片处理(仅适用于无转义的简单场景)
如果你的字符串格式固定,都是b'xxx'的结构,且内部没有转义的单引号,可以手动去掉前后的标识字符后编码为bytes,优点是无需导入模块,缺点是兼容性差,遇到特殊字符会出错。
encrypted_text_str = "b'gAAAAABhdoRSo3k8NAXitaA=='" # 去掉前缀的`b'`和后缀的`'`,再编码为bytes encrypted_bytes = encrypted_text_str[2:-1].encode('utf-8') print(type(encrypted_bytes)) # 输出: <class 'bytes'>
注意事项
- 不要直接使用
eval处理外部输入的字符串:外部不可信的输入可能包含恶意代码,eval会直接执行,存在严重安全风险。 - 如果拿到的字面量是用双引号包裹的(比如
b"xxx"),手动切片时要对应调整截取的范围,或者直接用ast.literal_eval自动兼容两种引号格式。
内容的提问来源于stack exchange,提问作者theFinestHobo
相关产品推荐
相关产品推荐

