我正在遗留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
,它总能纠正从数据库获取的数据。
答案 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方法编码时才是正确的