Django + SQLite中的Unicode字符串

问题描述 投票:0回答:1

我在Django 1.6中有一个模型:

class Text(models.Model):
  text = models.CharField()
  def __unicode__(self):
    return self.text

我在此字段的表格中存储了一个西里尔文本。

当我尝试从Django shell中的表请求对象时,我得到了令人困惑的结果:

print t

返回存储在表中的正确字符串

print t.text

返回u'u\0427u\0438'

为什么不正确返回字段值?

python django unicode
1个回答
2
投票

当您使用print时,Python将尝试使用sys.stdout.encoding将Unicode值编码到终端或控制台编解码器;如果将其设置为无法编码数据的编码,则抛出UnicodeEncodingException

另一方面,你试过使用过repr(),或者只是让t.text在交互式会话中回应,这就是同样的事情。 repr()将为您提供字符串文字的ASCII安全表示,该值可以直接粘贴到解释器中以重新创建字符串。为了保持ASCII安全,所有不可打印ASCII字符的代码点都使用转义序列来表示;新行再次成为\n,并且通过Latin-1范围的代码点使用\uxxxx表示。

另一方面,当你使用print model时,使用默认的.__str__() method on models;此方法将.__unicode__()方法返回的Unicode值编码为UTF-8。

如果您在使用print t时看到正确的输出,print t.textprint repr(t.text)的例外工作,您的终端配置不正确。您可以在这种情况下将值显式编码为UTF-8,因为那已经适合您:

print t.text.encode('utf8')
© www.soinside.com 2019 - 2024. All rights reserved.