Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x 将Unicode转义转换为希伯来文文本_Python 3.x_Unicode_Utf 8_Hebrew_Unicode Escapes - Fatal编程技术网

Python 3.x 将Unicode转义转换为希伯来文文本

Python 3.x 将Unicode转义转换为希伯来文文本,python-3.x,unicode,utf-8,hebrew,unicode-escapes,Python 3.x,Unicode,Utf 8,Hebrew,Unicode Escapes,我在json文件中有以下文本: "\u00d7\u0090\u00d7\u0097\u00d7\u0095\u00d7\u0096\u00d7\u00aa \u00d7\u00a4\u00d7\u0095\u00d7\u009c\u00d7\u0092" 代表希伯来语中的文本“אחזתפולג” 无论我使用哪种编码/解码方式,我似乎都不太正确 Python 3 例如,我将尝试: text = "\u00d7\u0090\u00d7\u0097\u00d7\u0095\u00d7\u0096\

我在json文件中有以下文本:

"\u00d7\u0090\u00d7\u0097\u00d7\u0095\u00d7\u0096\u00d7\u00aa 
\u00d7\u00a4\u00d7\u0095\u00d7\u009c\u00d7\u0092"
代表希伯来语中的文本“אחזתפולג”

无论我使用哪种编码/解码方式,我似乎都不太正确 Python 3

例如,我将尝试:

text = "\u00d7\u0090\u00d7\u0097\u00d7\u0095\u00d7\u0096\u00d7\u00aa 
\u00d7\u00a4\u00d7\u0095\u00d7\u009c\u00d7\u0092".encode('unicode-escape')

print(text)
我得到的文本是:

b'\\xd7\\x90\\xd7\\x97\\xd7\\x95\\xd7\\x96\\xd7\\xaa \\xd7\\xa4\\xd7\\x95\\xd7\\x9c\\xd7\\x92'
如果我只删除了一个反斜杠和一个转折点,那么字节码中的几乎就是正确的文本

进入

(注意我是如何将双斜杠改为单斜杠的)然后

将产生正确的希伯来文文本

但我正在努力做到这一点,无法创建一段代码来为我做到这一点(而不是像我刚才所展示的那样手动完成…)

非常感谢任何帮助…

此字符串不“表示”希伯来文文本(至少不表示为unicode码点、UTF-16、UTF-8或任何众所周知的方式)。相反,它表示一个UTF-16代码单元序列,该序列主要由乘法符号、货币符号和一些奇怪的控制字符组成

看起来原始字符数据已经用一些奇怪的编码组合进行了多次编码和解码

假设这就是JSON文件中保存的内容:

"\u00d7\u0090\u00d7\u0097\u00d7\u0095\u00d7\u0096\u00d7\u00aa \u00d7\u00a4\u00d7\u0095\u00d7\u009c\u00d7\u0092"
您可以恢复希伯来文文本,如下所示:

(jsonInput
  .encode('latin-1')
  .decode('raw_unicode_escape')
  .encode('latin-1')
  .decode('utf-8')
)
对于上述示例,它给出了:

'אחוזת פולג'
如果您使用JSON反序列化程序读取数据,那么您当然应该省略
.encode('latin-1').decode('raw\u unicode\u escape')
步骤,因为JSON反序列化程序已经为您解释了转义序列。也就是说,在JSON反序列化器加载文本元素之后,只需将其编码为
latin-1
,然后将其解码为
utf-8
。这是因为
latin-1
(ISO-8859-1)是一种8位字符编码,与unicode的前256个代码点完全对应,而奇怪的断开文本将UTF-8编码的每个字节编码为UTF-16代码单元的ASCII转义


如果您的JSON同时包含中断的转义序列和有效文本,我不确定您能做什么,可能是
latin-1
不再正常工作。请不要将此转换应用于JSON文件,除非JSON本身只包含ASCII,否则这只会让一切变得更糟。

您能将其发送回去吗?请在JSON文档中输入“אחזזפולג”或“\u05D0\u05D7\u05D5\u05D6\u05EA\u0020\u05E4\u05D5\u05DC\u05D2”。请查看以下内容:。感谢您的详细解释。我的json文件包含纯英语文本和\u00xxx类型的文本('表示'希伯来语')。我无法预先区分文本中的英语和希伯来语部分。。。你知道我该怎么处理吗?@Limitless我认为如果你的纯英语文本严格地在ASCII 0-127范围内,它实际上仍然可以工作,因为它只需不改变地通过所有编码-解码阶段。你能举出一个不起作用的例子吗?这些都是来自facebook帖子/页面/评论的数据,所以我想没有太多特殊的字符。。。如果我遇到这样的角色,我会更新。。。谢谢@无限我看不出有任何理由认为来自facebook帖子的数据中没有每一种奇怪的字符。在(很有可能)的情况下,您会发现任何字符超出了通常的ascii范围,它们的编码格式与原始问题中的文本不同,我建议您首先调查一下为什么数据以这种不正确的格式到达,而不是试图从已经破碎的文本中重建原始意义。
"\u00d7\u0090\u00d7\u0097\u00d7\u0095\u00d7\u0096\u00d7\u00aa \u00d7\u00a4\u00d7\u0095\u00d7\u009c\u00d7\u0092"
(jsonInput
  .encode('latin-1')
  .decode('raw_unicode_escape')
  .encode('latin-1')
  .decode('utf-8')
)
'אחוזת פולג'