Python 忽略转义序列

时间:2021-03-07 16:11:01

标签: python printing escaping

假设我有从 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

2 个答案:

答案 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'

str.isprintable

<块引用>

如果字符串中的所有字符都可打印或 字符串为空,否则为 False。不可打印的字符是那些 在 Unicode 字符数据库中定义为“其他”或 “分隔符”,除了被考虑的 ASCII 空间 (0x20) 可打印。