【发布时间】:2011-01-17 01:22:22
【问题描述】:
我确定这个问题不是 django 特有的,但由于我在其他有关 python 和编码的问题中找不到任何解决方案,所以我要问这个问题。 我需要向使用 MySQL 作为后端的 PHP 编写的现有网站添加新功能。我检查了数据库并为要使用的表创建了模型。然而,现有数据存在问题——其中一半是俄语,而且(至少在我看来)它是 utf-8 编码。 当我在 django 的管理员中显示该数据时,它显示不正确。
In [52]: p.name
Out[52]: u'\xd0\u02dc\xd0\xb3\xd0\xbe\xd1\u20ac\xd1\u0152 '
In [53]: repr(p.name)
Out[53]: "u'\\xd0\\u02dc\\xd0\\xb3\\xd0\\xbe\\xd1\\u20ac\\xd1\\u0152 '"
在 django admin 中显示如下:
Игорь
编码对我来说仍然有点神秘,但如果我正确理解这个输出,基本上这些是 unicode 对象中的 utf-8 字节。
问题:是否可以在 django 的数据库层中解决这个问题?我将更新这些表中的现有内容,并且我需要现有的 PHP 前端与新数据和旧数据兼容。
当我添加这些数据库选项时,数据在管理员中正确显示,但是,我在保存某些内容时收到 UnicodeEncode 错误。
DATABASE_OPTIONS = {
'charset': 'latin1',
'use_unicode': False,
}
在这种情况下返回的名称是:
In [2]: p2.name
Out[2]: '\xd0\x9b\xd0\xae\xd0\xa1\xd0\xaf'
我检查了 utf-8 字符表,对于存储在该行中的数据,这些字符是正确的。
【问题讨论】: