如何将 B 字符串转换为字节?
How do I convert a B string to bytes?
bstr = "b'\xe4\xb8\x96\xe7\x95\x8c'"
bbytes = b'\xe4\xb8\x96\xe7\x95\x8c'
我想将 bstr
转换为 bbytes
,我该怎么做?
您可以使用 ast.literal_eval
(文档 here)函数将此字符串计算为 python 文字。
import ast
bstr = "b'\xe4\xb8\x96\xe7\x95\x8c'"
bbytes = ast.literal_eval(bstr)
print(bbytes) # Outputs: b'\xe4\xb8\x96\xe7\x95\x8c'
此函数应该可以安全地用于用户输入(与 eval
不同),但您可能应该强制执行长度限制以解决有关使用 long/complex 输入使解释器崩溃的警告。
请注意,这也将正确解析其他有效的 python 文字(例如 int
、list
等),因此如果您想要强制执行,您最终只会得到bytes
你应该检查一下,例如
if not isinstance(bbytes, bytes):
raise ValueError("Input must be a bytes string")
希望您可以稍微更改输入,我将输入更改为转义 bstr
因此不会立即评估特殊字符。
如果您将此字符串作为用户输入,例如来自 input
或阅读文件,应该已经是这种情况了。
如果您没有正确转义的输入,您将得到一个异常:
>>> bstr = "b'\xe4\xb8\x96\xe7\x95\x8c'"
>>> ast.literal_eval(bstr)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/ast.py", line 48, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python3.6/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
bstr = "b'\xe4\xb8\x96\xe7\x95\x8c'"
bbytes = b'\xe4\xb8\x96\xe7\x95\x8c'
我想将 bstr
转换为 bbytes
,我该怎么做?
您可以使用 ast.literal_eval
(文档 here)函数将此字符串计算为 python 文字。
import ast
bstr = "b'\xe4\xb8\x96\xe7\x95\x8c'"
bbytes = ast.literal_eval(bstr)
print(bbytes) # Outputs: b'\xe4\xb8\x96\xe7\x95\x8c'
此函数应该可以安全地用于用户输入(与 eval
不同),但您可能应该强制执行长度限制以解决有关使用 long/complex 输入使解释器崩溃的警告。
请注意,这也将正确解析其他有效的 python 文字(例如 int
、list
等),因此如果您想要强制执行,您最终只会得到bytes
你应该检查一下,例如
if not isinstance(bbytes, bytes):
raise ValueError("Input must be a bytes string")
希望您可以稍微更改输入,我将输入更改为转义 bstr
因此不会立即评估特殊字符。
如果您将此字符串作为用户输入,例如来自 input
或阅读文件,应该已经是这种情况了。
如果您没有正确转义的输入,您将得到一个异常:
>>> bstr = "b'\xe4\xb8\x96\xe7\x95\x8c'"
>>> ast.literal_eval(bstr)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/ast.py", line 48, in literal_eval
node_or_string = parse(node_or_string, mode='eval')
File "/usr/lib/python3.6/ast.py", line 35, in parse
return compile(source, filename, mode, PyCF_ONLY_AST)
File "<unknown>", line 1
SyntaxError: bytes can only contain ASCII literal characters.