1

使用 mysql(不是我的选择),一切都设置为utf8, utf8_general_ci。在正常情况下utf8,一切都是快乐的。

但是,如果我 POST sth like É’s, somelatin1并照常将其保存到数据库中,则无法调用.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.

尝试这样的方法只会导致UnicodeEncodeError前期。

编辑:正如丹尼尔的回答所暗示的,这个问题来自误解。latin1不是这里的罪魁祸首。.decode('utf-8')尝试编码为 ASCII,因此,对于像u'팩맨'.decode('utf-8'). 离开这个问题让我很痛苦,因为我知道我现在所知道的。但是,也许它会帮助某人。我认为,由于数据实际上是以 unicode 形式返回的,所以我们试图做的实际上相当于u'É’'.decode('utf-8').

4

1 回答 1

1

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

于 2012-08-09T13:17:39.500 回答