Pydantic json方法中的西里尔符号编码不正确(Python)

tez616oj  于 2023-05-08  发布在  Python
关注(0)|答案(1)|浏览(159)

问题的简单示例如下:

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
bwitn5fc

bwitn5fc1#

Python的JSON模块试图将所有JSON输出保持在ASCII中,ASCII不包含任何西里尔字符。
您可以使用ensure_ascii=False关闭此设置:

print(city.json(ensure_ascii=False))

输出:

{"name": "Город"}

请注意,某些JSON解析器可能无法读取此文件。
如果你想使用代码页866而不是UTF-8输出这个字符串,你可能需要这个代码,以便将字符串从Python的str类型编码为bytes类型:

city.json(ensure_ascii=False).encode('cp866')

注意,cp 866代表代码页866。

相关问题