2011-10-26 44 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的文章,但總是值得刷新,謝謝。 –