在 Python 3 中取消转义双反斜杠序列

问题描述

我有一个这样的字符串:

'hello this is nice\\r\\n\\xc2\\xa0 goodbye'

我需要将其转换为纯 utf-8 文本。

编解码器库没有解决这个问题:

codecs.unicode_escape_decode(x)[0]
'hello this is nice\r\nÂ\xa0 goodbye'

如何将该字符串转换为干净的 utf-8 文本?

解决方法

不是特别优雅,但这似乎符合您的要求。

>>> codecs.unicode_escape_decode(x)[0].encode('latin-1').decode('utf-8')
'hello this is nice\r\n\xa0 goodbye'

有点晦涩,Latin-1 编码具有吸引人的特性,即每个字节都准确地编码该字符代码,因此它可用于透明地将 bytes 转换为字符串,反之亦然。

(如果不是很明显,b'\xc2\xa0'U+00A0 的 UTF-8 编码。)