在某些时候,我们的 python 脚本会收到这样的字符串:
In [1]: ab = 'asd\xeffe\ctive'
In [2]: print ab
asd�fe\ctve \ \\ \\\k\\\
数据已损坏,我们需要转义 \x 才能正确解释为 \x 但 \c 在字符串中没有特殊含义,因此必须完好无损。
到目前为止,我找到的最接近的解决方案是执行以下操作:
In [1]: ab = 'asd\xeffe\ctve \\ \\\\ \\\\\\k\\\\\\'
In [2]: print ab.encode('string-escape').replace('\\\\', '\\').replace("\\'", "'")
asd\xeffe\ctve \ \\ \\\k\\\
从 IPython 获取的输出,我假设 ab 是一个字符串而不是 unicode 字符串(在后一种情况下,我们将不得不这样做:
def escape_string(s):
if isinstance(s, str):
s = s.encode('string-escape').replace('\\\\', '\\').replace("\\'", "'")
elif isinstance(s, unicode):
s = s.encode('unicode-escape').replace('\\\\', '\\').replace("\\'", "'")
return s