python - 如何将带有字节值的字符串转换回字节?
问题描述
我有一个程序,可以在其中将 python check_output 输出写入文件。我忘记将编码设置为“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'
解决方案
你想要opt.decode('utf-8')
; str
在bytes
没有第二个 ( encoding
) 参数的情况下调用对象只会获取对象repr
的bytes
。如果您有来自此类转换的数据,您可以使用 将其转换回原始bytes
对象,ast.literal_eval
然后对结果执行预期decode
的操作。例子:
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)
输出:
<?xml version="1.0" encoding="UTF-8"?>
<math xmlns="http://www.w3.org/1998/Math/MathML" alttext="a+b" display="block">
<apply>
<plus/>
<ci></ci>
<ci></ci>
</apply>
</math>
推荐阅读
- python - Bigtable python客户端:如何检索大于给定值的最小行键
- css - Tailwind/CSS 使用自定义字体
- node.js - request-promise post 请求到 axios 请求
- vespa - ES "minimum_should_match" 查询如何转换为 vespa 查询?
- flutter - Flutter 插件混淆
- cors - Lumen 8 CORS 问题 2020 年 12 月
- github - Github 操作:将 .env 文件内容存储到 github 机密中,并且在管道中希望将机密内容放入 .env 文件中
- hdf5 - 在 ubuntu-20.04 上构建 HDFView 3.1
- server - 如何在多个后端重用服务器并在 HAproxy 中为前端提供多个后端?
- spring-boot - Hi i am trying to learn Apache camel framework. I dont know what i am doing wrong here