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

如何在Django中使用JSONField存储波斯语字符并解决Unicode转义问题

问题原因
  • PostgreSQL存储JSON/JSONB类型数据时,默认会对非ASCII字符做Unicode转义处理,你看到的\u0628\u0631\u0646\u062f格式是转义后的正常存储形式,并非数据损坏,Django读取该字段时会自动将其转回原始波斯语字符,默认不影响业务读写。
  • 若Django读取字段后仍无法正常展示波斯语,则是数据库连接编码配置错误导致。
解决方案
  • 若仅在直接查询数据库时看到转义序列,业务侧读写正常:无需做任何修改,该存储形式是PostgreSQL JSON类型的标准行为,数据完整性不受影响。
  • 若需要数据库内直接存储可读的波斯语字符,可自定义JSON编码器关闭ASCII转义:
  1. 定义自定义编码器
import json
from django.core.serializers.json import DjangoJSONEncoder
from django.contrib.postgres.fields import JSONField

class NonEscapeJSONEncoder(DjangoJSONEncoder):
    def encode(self, o):
        return json.dumps(o, ensure_ascii=False, cls=DjangoJSONEncoder)
  1. 修改模型字段指定编码器
class example(models.Model):
    spec_json = JSONField(
        null=True, 
        blank=True,
        encoder=NonEscapeJSONEncoder
    )
  • 若读取时仍存在乱码,检查数据库连接配置,在settings.py中添加UTF8编码指定:
DATABASES = {
    "default": {
        # 原有数据库配置保持不变
        "OPTIONS": {
            "client_encoding": "UTF8"
        }
    }
}

内容的提问来源于stack exchange,提问作者ali ardakani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:09:02