首页 > 解决方案 > 加载 json 文件并以 UTF-16 解码

问题描述

这是表达我的问题的更好方式:

我正在尝试从python 2.7 中 utf-16的文件中读取字符(英语和阿拉伯语) 。.json.gz

我写的代码行读取utf-8字符:

import glob
import json
import gzip

print("Reading input JSON files")
    for filename in glob.glob("*api*.json.gz"):
        with gzip.open(filename,'r') as f:
            data = json.loads(f.read().decode('utf-8'))

utf-8我尝试了对to的简单替换utf-16,但出现此错误:

ValueError: No JSON object could be decoded

任何帮助,将不胜感激。

标签: pythonjsonunicodearabicutf

解决方案


将编码指定为open(). 这是一个“往返演示”:

>>> import json
>>> data = {
...     "title": "قالت وزارة الداخلية المصرية إن كمية من المتفجرات في سيارة كانت معدة لتنفيذ عملية إرهابية أدت إلى الانفجار الذي وقع وسط القاهرة وأودى بحياة نحو 20 شخصا."
... }
>>> with open("/tmp/utf16demo.json", "w", encoding="utf-16") as f:
...     json.dump(data, f)
>>> with open("/tmp/utf16demo.json", encoding="utf-16") as f:
...     newdata = json.load(f)
>>> next(iter(newdata.values())) == next(iter(data.values()))
True

正如评论中提到的,仅仅因为数据最初是UTF-16 编码的,并不需要您以相同的编码将其写回 CSV。您可以使用 UTF-16 完全自由地加载和解码,然后使用 UTF-8 写出。


推荐阅读