当前位置: 首页 > 知识库问答 >
问题:

将具有转义 unicode 的 json 文件转换为实数 unicode,同时保留转义的双引号

欧阳俊明
2023-03-14

我在json文件中有一个转义的unicode字符串,例如:

{"word": "\u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u043a \u043d\u0430 \u0433\u043e\u0440\u0435 \u0441\u0432\u0438\u0441\u0442\u043d\u0435\u0442",
"glosses": ["when pigs fly, never (lit., \"when the crawfish whistles on the mountain\")"]}}

我想转换这个文件,以便显示正确的unicode。在Python中,我发现了几个建议,例如:

import codecs

# opens a file and converts input to true Unicode
with codecs.open("kaikki.org-dictionary-Russian.json", "rb", "unicode_escape") as my_input:
contents = my_input.read()
# type(contents) = unicode 

# opens a file with UTF-8 encoding
with codecs.open("utf8-dictionary.json", "wb", "utf8") as my_output:
my_output.write(contents)

我还在不使用“编解码器”的情况下编写了另一个类似的函数,但两者都得到了相同的结果。执行该命令后,我得到:

{"word": "когда рак на горе свистнет", 
"glosses": ["when pigs fly, never (lit., "when the crawfish whistles on the mountain")"]}

转义的双引号不再转义,这使得JSON无效。我如何才能避免这种情况?

编辑:我忘了说我有一个jsonlines格式的文件,所以每一行都是一个json对象,以{...}.

感谢所有的帮助!我的最终解决方案:

import json

with open("kaikki.org-dictionary-Russian.json", "r", encoding="utf-8") as input, \
open("utf8-dictionary-4.json", "w", encoding="utf-8") as out:
for line in input:
    data = json.loads(line) 
    json.dump(data, out, ensure_ascii=False)
    out.write("\n")

共有1个答案

沈建柏
2023-03-14

使用json库处理json数据。它将确保序列化数据是有效的JSON,并且有一些选项用于控制输出,例如缩进的漂亮打印和非ASCII字符,而不进行转义。

首先,使用 json.load() 解析数据:

>>> with open("kaikki.org-dictionary-Russian.json", encoding="utf8") as f:
...     data = json.load(f)

注意:在Python 3中,不需要使用< code>codecs库来读/写文件。只需在内置的< code>open函数中指定文件编码即可。

再次序列化数据,现在使用< code >确保_ascii选项,这导致转义序列的使用最少(只有双引号、换行符和制表符被IIRC转义):

>>> with open("utf8-dictionary.json", "w", encoding="utf8") as f:
...     json.dump(data, f, ensure_ascii=False)
 类似资料:
  • 嗨,我在Python中将utf-8 json转换成unicode escape json时遇到了一些问题 我知道如何将utf-8.txt转换为unicodeescape.txt 但是,我在Python中使用json模块时遇到了上面应用的问题,如下所示 它保存得很好,但是,当涉及到json中的双引号(“)时,它会自动添加双反斜杠(\\),因此unicode-esc.json文件在调用python脚本

  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 问题内容: 我在Java中的字符串变量中具有以下值,该字符串变量具有如下编码的UTF-8字符 代替 (假设我无法控制如何将此值分配给此字符串变量) 现在如何正确转换(编码)并将其存储回String变量中? 我发现以下代码 但这会返回,但我要返回。 编辑: 一些其他信息。 当我使用我得到 我不确定什么是正确的术语(UTF-8或unicode)。 问题答案: 尝试 来自Apache Commons L

  • 在JSON中,Unicode字符可以使用表示法进行转义。我假设显然是指十六进制的Unicode代码点。 但由于只有4位数字,这是否意味着无法转义

  • 本文向大家介绍js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换&#XXX函数代码,包括了js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换&#XXX函数代码的使用技巧和注意事项,需要的朋友参考一下 最近看不少在线工具里面都有一些编码转换的代码,很

  • 问题内容: 当我尝试使用“ unicode(head.contents [3])”获取标签的内容时,我得到类似于以下的输出:“ Christensen Sk \ xf6ld”。我希望转义序列作为字符串返回。如何在python中做? 问题答案: 假设Python将名称视为普通字符串,则首先必须将其解码为unicode: 实现此目的的另一种方法: 注意字符串前面的“ u”,表示它是未编码的。如果进行打