ある時点で、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