【问题标题】:String representing bytes to bytes [duplicate]表示字节到字节的字符串[重复]
【发布时间】:2022-01-18 20:42:56
【问题描述】:

我有一个像"b'\\x00\\x01\\x02\\x03\\x04'" 这样的字符串,它代表字节,我想将它转换成实际的bytes

我试过这样做:

string = "b'\\x00\\x01\\x02\\x03\\x04'"

data = bytes(string[2:-1], "utf-8") # Removing quotes and the b
print(data, type(data))

>>> b'\\x00\\x01\\x02\\x03\\x04' <class 'bytes'>

data 字节有双斜杠。


注意
它使用 eval 工作,但出于安全原因,我不会使用它。

【问题讨论】:

  • 使用eval,但是你从哪里得到这个字符串?您是否碰巧以文本模式将字节对象保存到文件中?请注意,您应该真正修复此字符串的 source 。此外,ast.literal_eval 在不受信任的输入上更安全
  • "但出于安全原因" 安全原因是什么?你从哪里得到字符串?
  • @juanpa.arrivillaga 是写入文件的纯文本。

标签: python string byte


【解决方案1】:

使用ast.literal_eval:

安全地评估包含 Python 文字或容器显示的表达式节点或字符串。提供的字符串或节点只能由以下 Python 文字结构组成:字符串、字节、数字、元组、列表、字典、集合、布尔值、无和省略号。 这可用于安全地评估包含来自不受信任来源的 Python 值的字符串,而无需自己解析这些值。

import ast

string = "b'\\x00\\x01\\x02\\x03\\x04'"

data = ast.literal_eval(string)

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 2019-02-22
    • 2016-03-09
    • 2011-12-14
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2018-07-23
    • 2021-03-27
    相关资源
    最近更新 更多