这是表达我的问题的一种更好的方式:
我正在尝试从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
任何帮助将不胜感激。
答案 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)