我有utf-8 Vs. 这里提到的字节串问题:Django头痛与简单的非ascii字符串
我不关心MySQL列中的区分大小写匹配,我只是总是想要返回UTF-8字符串,因为我发现不可能处理为非ascii文本返回字符列的字节串.
如何更改我的MySQL排序规则类型,以便始终通过Django返回UTF-8字符串?
我有简单的Django新闻条目模型:
class NewsEntry(models.Model):
pub_date = models.DateTimeField('date published')
title = models.CharField(max_length = 200)
summary = models.TextField()
content = models.TextField()
def __unicode__(self):
return self.title
Run Code Online (Sandbox Code Playgroud)
使用英文文本添加新消息(在管理员页面中)工作正常,但当我尝试添加俄语文本的新闻时,会出现错误:
/ admin/news/newsentry /中的TemplateSyntaxError
渲染时捕获DjangoUnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd0:序数不在范围内(128).你传递了NewsEntry:[错误的Unicode数据](类'antek.news.models.NewsEntry')
Django版本:1.2.2
异常类型:TemplateSyntaxError
异常值:渲染时捕获DjangoUnicodeDecodeError:'ascii'编解码器无法解码位置0中的字节0xd0:序数不在范围内(128).你传递了NewsEntry:[错误的Unicode数据](类'antek.news.models.NewsEntry')
异常位置:/usr/local/lib/python2.6/dist-packages/django/utils/encoding.py in> force_unicode,第88行
Python版本:2.6.5
回溯列表中的最后一项是:
force_unicode中的/usr/local/lib/python2.6/dist-packages/django/utils/encoding.py
当地的vars:
e:UnicodeDecodeError('ascii','\ xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd1\x80\xd1\x83\xd1\x81\xd1\x81\xd0\xba\xd0\xbe\xd0\xb3\xd0\xbe',0,1,'序数不在范围内(128)')
代码看起来正确:self.title是unicode对象.此外,djangoproject.com在他们的博客应用程序中使用类似的代码.
我花了很多时间来解决这个问题,并创建了一个奇怪的解
from django.utils.encoding import force_unicode
# ...
def __unicode__(self):
return force_unicode(self.title)
Run Code Online (Sandbox Code Playgroud)
但是由于self.title是unicode对象,force_unicode应该返回它而不做任何更改.
为什么return self.title不起作用?