首页 > 解决方案 > 如何在 Python 中将双反斜杠 unicode 字符转换为原始字符?

问题描述

我正在使用多语言字符串,其中许多字符串中有希伯来语、阿拉伯语、中文等字符,这些字符被编码并以这种格式出现:\\x00,即两位数的双反斜杠转义。字符串是字节格式,即它们以这种格式出现: b''.

我已经在 SO 和其他网站上阅读了几条评论,但仍然不知道如何将它们转换回原始字符。

我知道如果反斜杠是单反斜杠,以下将解决它:

b'\xd7\x90\xd7\x91\xd7\x92'.decode('utf-8')

它会返回:'אבג'.

但是当.decode('utf-8')在我的字符串上应用相同的方法时,输出就搞砸了。

b'\\xd7\\x90\\xd7\\x91\\xd7\\x92'.decode('utf-8')

将返回:'×\x90×\x91×\x92'

我真的不想在上面应用正则表达式,必须有一个我不知道的更好的解决方案!

标签: python

解决方案


它不漂亮,但假设您的字符串中没有引号,您可以尝试

>>> x = b'\\xd7\\x90\\xd7\\x91\\xd7\\x92'
>>> ast.literal_eval(ast.literal_eval(f'"{x}"')).decode()
'אבג'

str这是基于原始值确实是正常编码对象的假设:

>>> 'אבג'.encode()
b'\xd7\x90\xd7\x91\xd7\x92'

但是你得到了它的表示而不是实际的字符串。

>>> repr('אבג'.encode())
"b'\\xd7\\x90\\xd7\\x91\\xd7\\x92'"

将您的值用引号括起来会创建一个字符串,该字符串literal_eval可以恢复为上面显示的表示形式,可以进一步评估为可以解码的“真实”字节字符串。


推荐阅读