You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 00:47:04