使用json.dumps转换含阿拉伯字符的字典至JSON时的编码问题
解决JSON导出时阿拉伯语不被编码且保持双引号规范的问题
这个问题我碰到过好几次了,其实解决起来非常简单——你只需要给json.dumps()(或者json.dump())加一个关键参数就能搞定!
问题根源
默认情况下,json.dumps()会把所有非ASCII字符(比如你的阿拉伯语词汇)转换成\uXXXX格式的Unicode转义序列,这就是你看到"\u0622\u0632\u064e\u0631"的原因。而如果直接把字典转成字符串写入文件,又会用Python的单引号,不符合JSON必须用双引号的规范。
解决方案
使用json.dumps()的ensure_ascii=False参数,这个参数会告诉JSON模块直接输出原始的Unicode字符,而不是对它们进行转义,同时还能严格遵守JSON的双引号格式要求。
另外,推荐使用with语句来操作文件,这样更安全(会自动关闭文件),代码也更简洁:
import json data = [{'name': 'آدَم'}, {'name': 'آزَر'}] # 使用with语句打开文件,指定utf-8编码 with open('data.json', 'a', encoding="utf-8") as f: # 用json.dump直接写入文件,加上ensure_ascii=False json.dump(data, f, ensure_ascii=False)
关键注意点
一定要在打开文件时指定encoding="utf-8",否则不同操作系统的默认编码可能导致阿拉伯语写入后出现乱码,确保编码统一才能正确保存和读取这些非ASCII字符。
执行这段代码后,你的data.json文件里就会直接显示原始的阿拉伯语内容,格式完全符合JSON规范:
[{"name": "آدَم"}, {"name": "آزَر"}]
内容的提问来源于stack exchange,提问作者coure2011
相关产品推荐
相关产品推荐

