Django - 在latin1中POST数据,解码为utf-8

时间:2012-08-09 12:35:45

标签: python mysql django utf-8 character-encoding

使用mysql(不是我的选择),一切都设置为utf8utf8_general_ci。在正常情况下,一切都是utf8并且很开心。

但是,如果我发布É’s,某些latin1,并将其保存到数据库中,我就无法在生成的模型字段上调用.decode('utf-8')

>>> myinstance.myfield.decode('utf-8')
...

UnicodeEncodeError: 'ascii' codec can't encode character u'\xc9' in position 7: ordinal not in range(128)

我想清理所有传入的数据,以便将其解码为utf8

尝试类似this的方法只会导致UnicodeEncodeError提前。

编辑:正如丹尼尔的回答所暗示的那样,这个问题来自误解。 latin1不是罪魁祸首。 .decode('utf-8')尝试编码为ASCII,因此,u'팩맨'.decode('utf-8')等unicode会失败。我知道现在知道什么,这让我很难忘记这个问题。但是,也许它会帮助某人。我认为,由于数据实际上是以unicode形式返回,我们试图做的事实上等同于u'É’'.decode('utf-8')

1 个答案:

答案 0 :(得分:1)

Django字段总是unicode。尝试在它们上调用decode意味着在尝试解码为UTF-8之前,Python将首先尝试编码到ASCII。这显然不是你想要的。我希望你真的只想做myinstance.myfield.encode('utf-8')