我的 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'
在字节码中是almost正确的文本,如果我能够删除只有一个反斜杠并转动
b'\\xd7\\x90\\xd7\\x97\\xd7\\x95\\xd7\\x96\\xd7\\xaa \\xd7\\xa4\\xd7\\x95\\xd7\\x9c\\xd7\\x92'
into
text = b'\xd7\x90\xd7\x97\xd7\x95\xd7\x96\xd7\xaa \xd7\xa4\xd7\x95\xd7\x9c\xd7\x92'
(注意我如何将双斜杠更改为单斜杠)然后
text.decode('utf-8')
将产生正确的希伯来语文本。
但我正在努力这样做,并且无法设法创建一段代码来为我做到这一点(而不是像我刚刚展示的那样手动......)
非常感谢任何帮助...
该字符串不“表示”希伯来语文本(至少不表示为 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_unicode_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,这只会让一切变得更糟。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)