将 Unicode Escape 转换为希伯来语文本

Convert Unicode Escape to Hebrew text

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

"\u00d7\u0090\u00d7\u0097\u00d7\u0095\u00d7\u0096\u00d7\u00aa 
\u00d7\u00a4\u00d7\u0095\u00d7\u009c\u00d7\u0092"

表示希伯来语中的文本“אחוזת פולג”。

无论我用哪个 encoding/decoding 我似乎都不适合 Python3.

如果例如生病尝试:

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'

在字节码中几乎是正确的文本,如果我能够删除只有一个反斜杠并转

b'\xd7\x90\xd7\x97\xd7\x95\xd7\x96\xd7\xaa \xd7\xa4\xd7\x95\xd7\x9c\xd7\x92'

进入

text = b'\xd7\x90\xd7\x97\xd7\x95\xd7\x96\xd7\xaa \xd7\xa4\xd7\x95\xd7\x9c\xd7\x92'

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

text.decode('utf-8')

将生成正确的希伯来文文本。

但我正在努力这样做并且无法创建一段代码来为我做这件事(而不是像我刚才展示的那样手动...)

非常感谢任何帮助...

此字符串不是 "represent" 希伯来文文本(至少不是 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 编码的每个字节编码为 ASCII - 转义 UTF-16 代码单元。

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