Python中Pydantic json方法西里尔符号编码异常求助
问题描述
以下代码运行后,city.json()输出的西里尔字符被转义为Unicode编码(如\u0413\u043e\u0440\u043e\u0434),无论修改控制台编码、系统语言设置、文件编码还是重装Python都无法解决,写入文件时结果依然如此,希望输出包含原始西里尔符号的纯JSON:
from pydantic import BaseModel class City(BaseModel): name: str city = City(name="Город") print(city) # name='Город' print(city.json()) # {"name": "\u0413\u043e\u0440\u043e\u0434"}
系统信息:
- Windows 11
- Python 3.11.3
- Pydantic 1.10.7
- .py文件编码为UTF-8
已尝试的方法:
- 修改chcp选项
- 修改Windows语言设置
- 修改.py文件编码
- 重新安装Python
解决方案
在调用json()方法时添加ensure_ascii=False参数即可保留原始西里尔字符:
from pydantic import BaseModel class City(BaseModel): name: str city = City(name="Город") print(city.json(ensure_ascii=False)) # {"name": "Город"} # 写入文件示例 with open("output.json", "w", encoding="utf-8") as f: f.write(city.json(ensure_ascii=False))
原因说明
Pydantic 1.x的json()方法底层基于Python标准库的json模块,默认ensure_ascii=True,会自动将所有非ASCII字符转义为Unicode编码格式。设置ensure_ascii=False后,JSON输出会直接保留原始的非ASCII字符,同时写入文件时需指定编码为utf-8,确保字符正确保存。
内容的提问来源于stack exchange,提问作者numericmaestro
相关产品推荐
相关产品推荐

