python - 加载 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
任何帮助,将不胜感激。
解决方案
将编码指定为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 写出。
推荐阅读
- laravel - 在控制器中使用本地化时显示重定向页面
- active-directory - 希望在 Windows 服务器上使用 kerberos 在 JBoss EAP 7 中设置 SSO
- c - 了解 C 中数组元素中分配的内存地址(Windows 10 中的 gcc)
- c - 读取 HTTPS 流量中的 SSL 和 TLS 数据
- javascript - 如何在 O(1) 中更新 redux/vuex 存储中的元素?
- java - 在jsp中将表数据列表保存到数据库中
- xcode - 归档应用程序后,按钮上传到 App Store 不存在
- javafx - Java FX ComboBox 下拉列表
- tcp - tshark 输出字段的含义是什么?
- javascript - 如何在 JavaScript 中使用速度变量?