我需要在Python3中将复杂字符串中的
这也与这个不同,那里的问题可以通过
假设字符串如下:
这导致:
这将导致:
AttributeError: 'my_str'对象没有'decode'属性。
使用
\\
替换为\
。我知道这个问题已经被问过多次,但大多数情况下都是针对简单字符串的,因此没有一个(被接受的)答案真正适用于复杂字符串。这也与这个不同,那里的问题可以通过
.decode('unicode_escape')
来解决,但这种方法对于这个问题不起作用。请参见下文。假设字符串如下:
my_str = '\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'
直接的方法是:
my_str.replace('\\','\')
这导致:
语法错误:扫描字符串文字时遇到行尾
这个答案建议使用:
my_str.replace('\\\\','\\')
这将导致:
'\\xa5\\xc0\\xe6aK\\xf9\\x80\\xb1\\xc8*\x01\x12$\\xfbp\x1e(4\\xd6{;Z\\x'
所以,没有变化。
这个答案建议:
b = bytes(my_str, encoding='utf-8')
b.decode('unicode-escape')
但是对于这样一个复杂的字符串,这种方法行不通:
UnicodeDecodeError:“unicodeescape”编解码器无法解码49-50位置的字节:截断的\xXX转义
使用 decode(如此处建议 here)的结果为:
my_str.decode('unicode_escape')
AttributeError: 'my_str'对象没有'decode'属性。
使用
unicode_escape
进行编码和解码会返回完全不同的字符串(可能是因为使用了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'
your_text.replace('\\', '')
能起作用吗?实际上你并没有双重文字反斜杠... - Jon Clements