在Django-ORM中纠正latin-1编码的UTF-8

时间:2012-12-17 01:47:54

标签: 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.CharFielddjango.db.models.TextField数据上使用它。怎么做?

我尝试将django.db.models.CharFielddjango.db.models.TextField子类化,但无法确定从数据库拦截数据的位置。最佳解决方案类似于FTFYCharField,它总能纠正从数据库获取的数据。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我知道这可能会关闭...... 但也许可以防止一些头痛

在你进行任何“unicode”相关更改之前,请先了解一下unicode的含义,并注意你写的“¶”==ö只有当unicode用UTF-8方法编码时才是正确的