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

标签 python ascii

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

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

更多细节:这是我最初想要运行的代码。我在变量 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') ;调用strbytes上没有第二个 ( encoding ) 参数的对象只会得到 repr bytes的目的。如果您有来自此类转换的可用数据,则可以将其转换回原始 bytes对象with 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 - 如何将具有字节值的字符串转换回字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60067249/

相关文章:

c++ - 为什么 C11 或 C++11 中没有 ASCII 或 UTF-8 字 rune 字?

来自 SVG 的 Python Gtk3 窗口图标/来自股票主题的可缩放图标

python - 求和二维的最简单方法? (Python)

python - 在运行时加载 python 代码

c - C 中的按位移位

java - 如何在 java 中将 unicode 字符串转换为 ASCII

python - AppEngine 功能在本地开发服务器上工作,但在实时网络服务器上不工作

Python ElementTree 模块 : How to ignore the namespace of XML files to locate matching element when using the method "find", "findall"

java - ASCII 到 HTML 实体在 Java 中转义

c - C 中的 Vigenere 密码不起作用