假设我有一个字符串,它是另一个字符串的反斜杠转义版本。有没有一种简单的方法,在Python中,unescape字符串?例如,我可以这样做:
>>> escaped_str = '"Hello,\\nworld!"'
>>> raw_str = eval(escaped_str)
>>> print raw_str
Hello,
world!
>>>
然而,这涉及将(可能不受信任的)字符串传递给eval(),这是一个安全风险。标准库中是否有一个函数,它接受一个字符串并生成一个没有安全隐患的字符串?
答案 0 :(得分:126)
>>> print '"Hello,\\nworld!"'.decode('string_escape')
"Hello,
world!"
答案 1 :(得分:30)
您可以使用安全的ast.literal_eval
:
安全地评估表达式节点或包含Python的字符串 表达。提供的字符串或节点可能只包含 以下Python文字结构:字符串,数字,元组,列表, dicts,booleans和None。 (END)
像这样:
>>> import ast
>>> escaped_str = '"Hello,\\nworld!"'
>>> print ast.literal_eval(escaped_str)
Hello,
world!
答案 2 :(得分:14)
在python 3中,str
个对象没有decode
方法,您必须使用bytes
个对象。 ChristopheD的答案涵盖了python 2。
# create a `bytes` object from a `str`
my_str = "Hello,\\nworld"
# (pick an encoding suitable for your str, e.g. 'latin1')
my_bytes = my_str.encode("utf-8")
# or directly
my_bytes = b"Hello,\\nworld"
print(my_bytes.decode("unicode_escape"))
# "Hello,
# world"
答案 3 :(得分:0)
所有给定的答案将在通用Unicode字符串上中断。据我所知,以下代码在所有情况下都适用于Python3:
from codecs import encode, decode
sample = u'mon€y\\nröcks'
result = decode(encode(sample, 'latin-1', 'backslashreplace'), 'unicode-escape')
print(result)