我正在旧版 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.CharField
和 django.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/