在utf-16中加载json文件并解码

时间:2019-08-05 14:38:48

标签: python json unicode arabic utf

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

我正在尝试从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替换为utf-16,但出现此错误:

ValueError: No JSON object could be decoded

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

将编码指定为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

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

答案 1 :(得分:0)

import json
{"intents": [
    {"tag": "greeting",
     "patterns": ["هاي","عامل إيه","ايه اخبارك","ازيك"],
     "responses": ["هاي!","كويس","حمدالله","ماشي الحال وإنت  ??"],
     "context_set": ""
    }
    ]
}
with open("intents.json", encoding="utf-8") as f:
     intents = json.load(f)