问题的简单例子如下:
from pydantic import BaseModel
class City(BaseModel):
name: str
city = City(name="Город")
print(city) # name='Город'
print(city.json()) # {"name": "\u0413\u043e\u0440\u043e\u0434"}
我的系统信息:
问题仍然存在于任何 chcp 选项(控制台编码):866、1251、65001。如果我尝试将 json() 输出写入 txt 文件,输出是相同的 \u0413\u043e\u0440\u043e\u0434。如果您能帮助我解决根本问题,我将不胜感激。我希望此代码输出带有适当西里尔符号的纯 json。
我试过:
Python 的 JSON 模块试图将所有 JSON 输出保存在 ASCII 中,不包含任何西里尔字符。
您可以使用
ensure_ascii=False
关闭此设置:
print(city.json(ensure_ascii=False))
输出:
{"name": "Город"}
请注意,某些 JSON 解析器可能无法读取此文件。
如果您想使用代码页 866 而不是 UTF-8 输出此字符串,您可能需要此代码,以便将字符串从 Python 的 str 类型编码为字节类型:
city.json(ensure_ascii=False).encode('cp866')
注意 cp866 代表代码页 866。