python - 如何在 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'
。
我真的不想在上面应用正则表达式,必须有一个我不知道的更好的解决方案!
解决方案
它不漂亮,但假设您的字符串中没有引号,您可以尝试
>>> 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
可以恢复为上面显示的表示形式,可以进一步评估为可以解码的“真实”字节字符串。
推荐阅读
- settings - androidx 设置库和平板电脑横向模式 2 窗格布局
- nuxt.js - NUXTJS 如何设置从页面到布局的道具?
- ios - 如何在导航栏、标签栏、视图控制器之间传递数据
- javascript - 如何从 firebase-cloud-function 发送响应错误消息
- python - 调整带/不带颜色条的图形形状
- java - 为什么 java.awt.Button 要求布尔值?
- mysql - 尝试为我的 Python 3.7/Django 项目构建 Docker 映像时出现“OSError:mysql_config not found”
- python - 从用户输入变量向 Python 字典添加信息
- java - 在 Linux 上下载 Java jdk
- jenkins - 如何使用 Jenkins Groovy 脚本设置多个环境变量