【发布时间】:2019-07-25 06:31:21
【问题描述】:
很多关于非转义字符串的问题似乎与 Python 2 或非转义 unicode 字符代码有关。
我从 LDAP 返回了一个似乎是“双重转义”的字符串:
>>> escaped = "hello\\,world"
我想取消转义这个字符串并将其存储到另一个变量中,但 decode 没有返回我所期望的:
>>> escaped.encode().decode('unicode_escape')
'hello\\,world'
print() 的结果却返回了我想要的结果:
>>> print(escaped)
hello\,world
我知道我可以捕获result of that print to an IO stream,但肯定有比这更优雅的解决方案吗?
【问题讨论】:
-
"hello\\,world"没有双重转义甚至转义。尝试按原样打印它,您将看到>>> print("hello\\,world") hello\,world。 XY 问题?你真正的问题是什么? -
我认为取消转义一次应该产生
hello\,world,然后第二次应该产生hello,world。这不正确吗? -
在 REPL 中打印命令结果时会发生转义。始终使用
print测试您的结果,因为这就是将在文件中显示/存储的内容,等等...您在哪里取消转义 BTW?你想逃跑吗? -
我只是想存储未转义的值以供以后显示。我对未转义值
hello\,world的理解是,它仍然被转义以明确表明逗号不应被视为 LDAP DN 字符串的一部分。 -
您的数据实际上包含
hello\,world。使用 print 为您提供显示的内容,使用 REPL 中的返回值为您提供可以在 python 中粘贴回的值,这说明有一个双“\\”
标签: python-3.x unicode escaping