如何将 utf-8 文本文件放入 Python 中的 Json 对象 3

How to get utf-8 text file into a Json object in Python 3

我是 Python 的新手,我遇到了有关 Unicode 文本内容和 JSON 字段的问题。

我的目标是读取一些包含 Unicode 字符的文本文件并提取全部内容并将它们放入 JSON 字段中。但是,JSON 字段将包含编码 (UTF-8) 而不是原始的 Unicode 字符(例如:JSON 将包含 \u00e8\u0107 èć)。如何将整个文本文件内容定向到 JSON 字段?

这是我的代码:

import json

file_1 = open('utf8_1.txt', 'r', encoding='utf-8').read()
file_2 = open('utf8_2.txt', 'r', encoding='utf-8').read()

with open("test.json", "r") as jsonFile:
    data = json.load(jsonFile)

data[0]['field_1'] = file_1
data[0]['field_2'] = file_2

with open("test.json", "w") as jsonFile:
    json.dump(data, jsonFile)

这是两个具有 Unicode 字符的文件:

utf8_1.txt:

Kèććia
ivò

utf8_2.txt:

ććiùri
iχa

这里是test.json:(注意:两个字段设置为空,需要更新文件内容)

[
  {
    "field_1": "",
    "field_2": ""
  }
]

这是我在 test.json 上从 运行 上面的代码得到的:

[
  {
    "field_1": "K\u00e8\u0107\u0107ia\niv\u00f2",
    "field_2": "\u0107\u0107i\u00f9ri\ni\u03c7a"
  }
]

但我对 test.json 的预期输出如下所示:

[
  {
    "field_1": "Kèććia ivò",
    "field_2": "ććiùri iχa"
  }
]

我的目标是将 utf8_1.txt 中的任何内容放入 field_1 和随便在utf8_2.txt里变成field_2在test.json里。最好是字符串值。我已经坚持了很长时间。 非常感谢你的帮助!

您得到的是有效的 UTF-8 JSON。它只是使用非 ASCII 字符的转义码编写为纯 ASCII,它作为 UTF-8 的子集也是有效的 UTF-8。使用 json.load 将其读回,它将是原始字符串。如果您希望在写入文件时将实际的 Unicode 字符编码为 UTF-8 而不是转义码,请使用 json.dumpensure_ascii=False 参数,并确保使用 encoding='utf8' 打开文件:

with open("test.json", "w", encoding='utf8') as jsonFile:
    json.dump(data, jsonFile, ensure_ascii=False)

这是在documentation:

json.<b>dump</b>(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
...
If ensure_ascii is true (the default), the output is guaranteed to have all incoming non-ASCII characters escaped. If ensure_ascii is false, these characters will be output as-is.