Python 如何将具有字节值的字符串转换回字节?

Python 如何将具有字节值的字符串转换回字节?,python,ascii,Python,Ascii,我有一个程序,在这个程序中,我在一个文件上编写python check_输出。我忘了将编码设置为“utf-8”,所有输出都以字节为单位。我已将这些字节值写入文件中。现在我的文件中有一些字符串,比如“b'math\xf0\x9d”,包含ASCII和十六进制。如何仅获取ASCII值并将十六进制值(如\xf0\x9d)转换为其原始值 要回答这个问题,我需要一种方法将带有字节值的字符串转换回字节。在下面的示例中,opt是字节,temp是字符串。如何再次将temp转换为opt 更多细节:这是我最初想要运行

我有一个程序,在这个程序中,我在一个文件上编写python check_输出。我忘了将编码设置为“utf-8”,所有输出都以字节为单位。我已将这些字节值写入文件中。现在我的文件中有一些字符串,比如“b'math\xf0\x9d”,包含ASCII和十六进制。如何仅获取ASCII值并将十六进制值(如\xf0\x9d)转换为其原始值

要回答这个问题,我需要一种方法将带有字节值的字符串转换回字节。在下面的示例中,opt是字节,temp是字符串。如何再次将temp转换为opt

更多细节:这是我最初想要运行的代码。我在变量opt中得到的是十六进制值。我希望通过将其转换为字符串,我可以摆脱它们,但它不起作用

latex = "a+b"
opt = check_output(["latexmlmath", "--quiet", "--cmml=-", latex])
temp = str(opt)
# also tried
temp = str(opt).encode("utf-8")
opt和temp值为:

b'<?xml version="1.0" encoding="UTF-8"?>\n<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="a+b" display="block">\n  <apply>\n    <plus/>\n    <ci>\xf0\x9d\x91\x8e</ci>\n    <ci>\xf0\x9d\x91\x8f</ci>\n  </apply>\n</math>\n'
b'<?xml version="1.0" encoding="UTF-8"?>\n<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="a+b" display="block">\n  <apply>\n    <plus/>\n    <ci>\xf0\x9d\x91\x8e</ci>\n    <ci>\xf0\x9d\x91\x8f</ci>\n  </apply>\n</math>\n'
b'\n\n\n\xf0\x9d\x91\x8e\n\xf0\x9d\x91\x8f\n\n\n'
b'\n\n\n\xf0\x9d\x91\x8e\n\xf0\x9d\x91\x8f\n\n\n'

您想要的
opt.decode('utf-8')
;在没有第二个(
encoding
)参数的
bytes
对象上调用
str
,只会得到
bytes
对象的
repr
。如果您有来自这种转换的数据,可以将其转换回原始的
字节
对象,然后对结果执行预期的
解码
。例如:

import ast

baddata = 'b\'<?xml version="1.0" encoding="UTF-8"?>\\n<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="a+b" display="block">\\n  <apply>\\n    <plus/>\\n    <ci>\\xf0\\x9d\\x91\\x8e</ci>\\n    <ci>\\xf0\\x9d\\x91\\x8f</ci>\\n  </apply>\\n</math>\\n\''
gooddata = ast.literal_eval(baddata).decode('utf-8')
print(gooddata)
导入ast
baddata='b\'\\n\\n\\n\\xf0\\x9d\\x91\\x8e\\n\\xf0\\x9d\\x91\\x8f\\n\\n\\n\'
gooddata=ast.literal\u eval(baddata).decode('utf-8')
打印(gooddata)
产出: