python - 正确的 Django-ORM 中的 latin-1 编码的 UTF-8

标签 python mysql django django-orm

我正在旧版 MySQL 数据库上设置 django-admin。

数据库声明它是 latin-1 编码的。数据库中输入的一些数据确实是latin-1,但有些实际上是UTF-8。这显示为损坏的字符,例如: � � � � �

旧应用程序使用一些黑魔法来隐藏这些错误,并且我无法修改数据库。

我发现了一个Python库ftfy,它可以将latin-1损坏的UTF-8转换为真正的UTF-8,例如上面的字符被翻译为“é € ä ö”。我想在从数据库加载的所有 django.db.models.CharField 和 django.db.models.TextField 数据上使用它。怎么做?

我尝试对 django.db.models.CharFielddjango.db.models.TextField 进行子类化,但无法弄清楚在哪里拦截数据库中的数据。最佳解决方案类似于 FTFYCharField ,它始终会纠正从数据库获取的数据。

最佳答案

假设只读,我认为您正在寻找的是 Writing custom model fields 。特别是,请查看 Converting database values to Python objects 部分。 。在 .to_python() 方法中,您可以对从数据库读取的任何/所有字段执行任何您想要的操作。

如果您还需要编写(并保持怪异),请参阅 Preprocessing values before saving 部分。 .

关于python - 正确的 Django-ORM 中的 latin-1 编码的 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907359/

相关文章:

python - python中最近5个数据集的聚合的持续更新

python - Django 日期输入解析?

python - 从 Matlab 到 Python - 求解函数

python - Django 联系表单类型错误 : context must be a dict rather than Context

python - pymc3 : Multiple observed values

python - 在mysql表中插入python变量时出错

mysql - 如何在mysql的删除/更新查询中使用子查询

mysql - SQL 各选其一

javascript - Django、apidoc js 在 PUT 方法中添加什么?

django - Django如何使用post_save信号