Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中将双反斜杠unicode字符转换为原始字符?_Python - Fatal编程技术网

如何在Python中将双反斜杠unicode字符转换为原始字符?

如何在Python中将双反斜杠unicode字符转换为原始字符?,python,Python,我正在使用多语言字符串,其中许多字符串具有希伯来文、阿拉伯文、中文等。这些字符串中的字符经过编码并以以下格式显示:\\x00,即两位数的双反斜杠转义。字符串采用字节格式,即它们以以下格式显示:b' 我已经在SO和其他网站上读到了一些评论,但仍然无法理解如何将它们转换回原始字符 我知道,如果反斜杠是单个反斜杠,下面的方法可以解决这个问题: b'\xd7\x90\xd7\x91\xd7\x92'.decode('utf-8') 它会返回:“אבג” 但是,当对我的字符串应用相同的.decode('

我正在使用多语言字符串,其中许多字符串具有希伯来文、阿拉伯文、中文等。这些字符串中的字符经过编码并以以下格式显示:
\\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\u eval
可以还原为上面所示的表示形式,可以进一步计算为可以解码的“真实”字节字符串。

一个简单的字符串替换“\\\”。。。也许?是什么产生了那根弦?它做得不正确。@chepner很遗憾,我不再很确定,它是很久以前从一个站点解析出来的,并存储在csv中。这是我拿到的表格。你的意思是它绝对不应该这样编码,因为在解析时,这被认为是一个错误?当然,我完全同意你的看法。但是,我再也无法追溯是谁和什么时候解析了数据,我们讨论的是几GB的信息,再次解析这些信息将非常昂贵,这就是我的问题产生的原因。:)如果从CSV读取,则应将其存储为
\xd7
字符,而不是文本
\xd7
。我猜这就是问题所在。