<分区>
我需要在 python3 的复杂字符串中用 \
替换 \\
。我知道这个问题已经被问过好几次了,但大多数时候都是针对简单的字符串,因此(已接受的)答案没有一个真正适用于复杂的字符串。
这也不同于 this one问题可以用 .decode('unicode_escape')
解决,但对这个问题不起作用。 见下文。
假设字符串是:
my_str = '\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'
直接的方法是:
my_str.replace('\\','\')
这导致:
SyntaxError: EOL while scanning string literal
这answer建议使用:
my_str.replace('\\\\','\\')
结果是:
'\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'
所以,没有变化。
这answer建议:
b = bytes(my_str, encoding='utf-8')
b.decode('unicode-escape')
但这对如此复杂的字符串不起作用:
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 49-50: truncated \xXX escape
使用解码(如建议的 here )导致:
my_str.decode('unicode_escape')
AttributeError: 'my_str' object has no attribute 'decode'
使用 unicode_esacpe
编码然后解码的组合返回一个完全不同的字符串(可能是由于使用 utf-16
,但 utf-8
导致错误,见上文。此外,例如 latin1
不起作用):
my_str.encode('utf-16').decode('unicode_escape')
'ÿþ\\\x00x\x00a\x005\x00\\\x00x\x00c\x000\x00\\\x00x\x00e\x006\x00a\x00K\x00\\\x00x\x00f\x009\x00\\\x00x\x008\x000\x00\\\x00x\x00b\x001\x00\\\x00x\x00c\x008\x00*\x00\x01\x00\x12\x00$\x00\\\x00x\x00f\x00b\x00p\x00\x1e\x00(\x004\x00\\\x00x\x00d\x006\x00{\x00;\x00Z\x00\\\x00x\x00'