假设我有从 XML 文件加载字符串的函数 load_from_xml()。字符串包含转义序列,例如:"Here\x20are\x20spaces"
。当我想打印它时,我得到:
s = str(load_from_xml())
print(s)
>"Here\x20are\x20spaces"
这不是所需的输出。 期望的输出是:
>"Here are spaces"
知道为什么 print() 会忽略转义序列吗?
编辑: load_from_xml() 函数示例:
import xml.etree.ElementTree as ET
def load_from_xml():
xml_string = "<data>Here\\x20are\\x20spaces</data>" # double \\ so data are stored like \x20
root = ET.fromstring(xml_string)
return root.text
答案 0 :(得分:0)
您正在寻找取消引用 :)
import urllib
urllib.parse.unquote("Here\x20are\x20spaces")
编辑:
然后,简单地:
import urllib
urllib.parse.unquote(load_from_xml().replace(r'\\', r'\'))
编辑:
但不,实际上,我给你的第一个简单的解决方案是可行的,看看你的函数,你的例子中已经有了简单的斜线......
并回答您的最后一个问题: 因为不是一般的转义序列,而是url引用序列...
答案 1 :(得分:0)
a="Here\x20are\x20spaces"
"".join(c for c in a if c.isprintable())
输出:
'Here are spaces
'
如果字符串中的所有字符都可打印或 字符串为空,否则为 False。不可打印的字符是那些 在 Unicode 字符数据库中定义为“其他”或 “分隔符”,除了被考虑的 ASCII 空间 (0x20) 可打印。