最近需要处理一大批的数据,需要将字典格式的标记文本写入文件,转换完成后发现,字典中的中文全都变成了Unicode编码显示
显示Unicode编码的转换方式
import json
data = {
"name": "张三",
"age": 20
}
fp = open('data.json', 'w', encoding='utf-8')
json_str = json.dumps(data)
fp.write(f'{json_str}')
fp.close()
# 结果如下
{"name": "\u5f20\u4e09", "age": 20}
- json.dumps 序列化时默认使用的是ascii编码,想输出中文需要指定参数ensure_ascii=False
正确的转换方式
import json
data = {
"name": "张三",
"age": 20
}
fp = open('data.json', 'w', encoding='utf-8')
json_str = json.dumps(data, ensure_ascii=False)
fp.write(f'{json_str}')
fp.close()
# 结果如下
{"name": "张三", "age": 20}
- 如果想格式化只需要增加一个参数indent=4
import json
data = {
"name": "张三",
"age": 20,
}
fp = open('data.json', 'w', encoding='utf-8')
json_str = json.dumps(data, ensure_ascii=False, indent=4)
fp.write(f'{json_str}')
fp.close()
# 结果如下
{
"name": "张三",
"age": 20
}
注:
- 如果觉得使用 fp = open('data.json', 'w', encoding='utf-8') 这种方式麻烦可以使用 with open('data.json', 'w', encoding='utf-8') as fp:
import json
data = {
"name": "张三",
"age": 20
}
with open('data.json', 'w', encoding='utf-8') as fp:
json.dump(res_str, fp, ensure_ascii=False, indent=4)