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

问题描述 投票:0回答:1

问题的简单例子如下:

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 选项(控制台编码):866、1251、65001。如果我尝试将 json() 输出写入 txt 文件,输出是相同的 \u0413\u043e\u0440\u043e\u0434。如果您能帮助我解决根本问题,我将不胜感激。我希望此代码输出带有适当西里尔符号的纯 json。

我试过:

  • 更改 chcp 选项
  • 更改 Windows 语言设置
  • 更改 .py 文件编码
  • 重新安装 Python
python json encoding pydantic cyrillic
1个回答
0
投票

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。

© www.soinside.com 2019 - 2024. All rights reserved.