保存对象时的UnicodeEncodeError

时间:2010-08-27 14:01:14

标签: django postgresql

在Django管理员中保存对象时出现此错误,UnicodeEncodeError:'ascii'编解码器无法对位置63中的字符u'\ xe9'进行编码:序号不在范围内(128)

我的数据库是unicode(postgres)保存的对象有一些法语字符。我在使用MySQL时保存对象之前从未遇到过任何问题。

1 个答案:

答案 0 :(得分:2)

在没有看到任何代码的情况下,猜测发生了什么是很棘手的,但我怀疑你正在将unicode传递给某些东西,然后将其转换为str

E.g。

>>> str(u'\xe9')

Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    str(u'\xe9')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)

你可能应该对你传入的任何内容进行编码,以便它变成一个合适的字节流。如果它期望str中的unicode,则utf8可能是一种选择,但请查阅文档以了解您正在使用的任何模块。

yourstring = yourunicode.encode("utf8")

unicode 不是字节编码所以它不能用于接口两个系统...因为需要应用哪一个编码(例如UTF8,UTF16等)了解。因此,在 unicode 中使用postgres和在 unicode 中使用python不允许您传递其内部表示的任何内容 - 在接口处您需要指定每个编码器应该使用。

What every coder should know about unicode