使用mysql(不是我的选择),一切都设置为utf8
,utf8_general_ci
。在正常情况下,一切都是快乐的。
但是,如果我发布了类似于utf8
、一些É’s
,并将其正常保存到数据库中,则无法在生成的模型字段上调用latin1
:
>>> myinstance.myfield.decode('utf-8')
...
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc9' in position 7: ordinal not in range(128)
我想清除所有传入的数据,以便将其解码为
.decode('utf-8')
。尝试像this这样的方法只会导致前面的
utf8
。编辑:正如丹尼尔的回答所暗示的,这个问题来自一个误解。
UnicodeEncodeError
不是这里的罪魁祸首。latin1
尝试编码为ASCII,因此对于unicode,它将失败,如.decode('utf-8')
。当我知道我现在知道什么的时候,把这个问题抛在脑后让我很痛苦。但是,也许它能帮助别人我认为,由于数据实际上是以unicode形式返回的,我们试图做的实际上相当于u'팩맨'.decode('utf-8')
。 最佳答案
Django字段总是unicode。尝试对它们调用decode
意味着Python将首先尝试编码为ASCII,然后再尝试解码为UTF-8。这显然不是你想要的。我想你实际上只是想做myinstance.myfield.encode('utf-8')
。
关于python - Django-latin1中的POST数据,解码为utf-8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11883610/