问题的简单示例如下:
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
- File .py编码为UTF-8
任何chcp option(控制台编码)仍然存在问题:866,1251,65001。如果我尝试将json()
输出写入txt文件,输出是相同的\u0413\u043e\u0440\u043e\u0434。如果你能帮我解决根本问题,我将非常感激。我希望这段代码输出带有正确西里尔符号的纯json。
我试过了
- 更改chcp选项
- 更改Windows语言设置
- 更改.py文件编码
- 重新安装Python
1条答案
按热度按时间bwitn5fc1#
Python的JSON模块试图将所有JSON输出保持在ASCII中,ASCII不包含任何西里尔字符。
您可以使用
ensure_ascii=False
关闭此设置:输出:
请注意,某些JSON解析器可能无法读取此文件。
如果你想使用代码页866而不是UTF-8输出这个字符串,你可能需要这个代码,以便将字符串从Python的str类型编码为bytes类型:
注意,cp 866代表代码页866。