2011-10-26 46 views
1

我在Django中有一个使用成员资格模型中的标准字段构建的Flash消息。Django消息框架中的Unicode

messages.add_message(request, 
        messages.INFO, 
        '{0} membership created'.format(membership.name)) 

除非memberships.name包含Unicode字符在这种情况下,我得到了UnicodeEncodeError这一切正常。我可以通过在字符串前加上u来创建一个unicode字符串来解决这个问题,但我不明白为什么这是必要的,因为Django假设所有的字节都是UTF-8。我是否应该浏览我的应用程序并将所有字符串更改为unicode字符串?

回答

1

这并不是Django的一个问题。它看起来像你被的方式str.format一个bug抓出处理Unicode参数,Python Issue 7300

一种解决方法是使用一个unicode字符串,另一种是使用%格式。

'%s membership created' % membership.name 
u'{0} membership created'.format(membership.name)) 
+0

似乎你是对的。谢谢! –

0

是的。 除了那些实际上是字节字符串,因为它们是从文件中读取的。

+0

或尝试“from __future__ import unicode_literals”。当然,阅读Spolskys关于每个人都应该阅读的Unicode的文章。 – jensq

+0

我已阅读过Spolsky的文章,但总是值得刷新,谢谢。 –