3

通过管理站点将新记录添加到 sqlite 数据库时,我遇到了 Unicode 字符串的问题。

class Translation(BaseModel):
  .....
  translation = models.CharField(max_length=100)

当我尝试插入像“été”这样的单词时,会发生错误:

**UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128)**

更新:添加回溯:http://pastebin.com/yLYFNDGB

4

2 回答 2

5

我找到了解决方案。实际上,问题不在于 Django 或 sqlite。问题出在unicode () 方法上。

以前是:

def __unicode__(self):
    return "{} ({})".format(self.translation, self.word.lang.abbr)

经过明显的修复后,问题就消失了:

def __unicode__(self):
    return u"{} ({})".format(self.translation, self.word.lang.abbr)
于 2012-07-10T15:22:05.263 回答
0

当您将é作为字符串分配给变量时,它实际上将其作为xe9

就像你去你的 python 命令行编辑器并编写以下代码一样:

>>> a = u'café'
>>> a 

然后回车,é字符被 \xe9 替换,如下图所示:

>>> u'caf\xe9'

另一方面,如果你用 print 语句写这个,你会得到你最初分配的,即:

>>> print a
café

因此,在提出这一点之后,您的问题的解决方案是使用utf8 编码来摆脱\xe9。因此,您可以通过以下方式对字符串进行编码:

>>> string_for_output = yourstring-with-é.encode('utf8', 'replace')

有关此主题的更多信息,您可以查阅此 URL它在“挫折#3:输出处理不一致”的标题下讨论了您的问题

希望这可以帮助。

于 2012-07-10T15:06:54.810 回答