Django:unicode字符串作为非unicode写入数据库

时间:2012-12-04 23:25:44

标签: python django

我编写了一个基本脚本,可以将数千个值导入Django数据库。以下是它的外观:link

这些位置是西里尔字母,并表示为unicode文字。但是,只要我将它们保存到数据库中,就会将它们转换为似乎是编码简单字符串的内容,采用某种十六进制编码:

>>> Region.objects.all()[0].parent
'\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82 \xd0\xa1\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xb5\xd0\xbd'

令人惊讶的是,它们在管理面板中正确显示,但在尝试使用它们时遇到了麻烦。如何以unicode的形式存储和检索它们?

我在MySQL上运行Django 1.4.0,整理设置为utf8_bin。

2 个答案:

答案 0 :(得分:1)

看起来数据是作为UTF-8字节字符串而不是Unicode字符串返回的。尝试解码它:

>>> x='\xd0\xbe\xd0\xb1\xd0\xbb\xd0\xb0\xd1\x81\xd1\x82 \xd0\xa1\xd0\xbb\xd0\xb8\xd0\xb2\xd0\xb5\xd0\xbd'
>>> x.decode('utf-8')
u'\u043e\u0431\u043b\u0430\u0441\u0442 \u0421\u043b\u0438\u0432\u0435\u043d'
>>> print x.decode('utf-8')
област Сливен

答案 1 :(得分:1)

这是一个Django / MySQL“bug”。请参阅问题#16052。它实际上是documented here