Django設置Cookie時需要注意,不能直接把utf-8編碼的漢字保存到Cookie中,否則會出現 UnicodeEncodeError ,提示:‘ascii’ codec can’t encode characters in position 0-1: ordinal not in range(128) 。
解決這個問題很簡單,只需要將Cookie由 unicode 類型轉為 str 類型就可以了,可以用傳統的方法,如:
from urllib import unquote
un = u"漢字"
# response.set_cookie("username", un) # UnicodeEncodeError!
un2 = unquote(unicode(un).encode("utf-8"))
response.set_cookie("user_name", un2) # OK
另外,也可以使用Django提供的專門處理這類編碼問題的方法。Django一共提供了三個方法:
django.utils.encoding.smart_unicode
django.utils.encoding.force_unicode
django.utils.encoding.smart_str
在這兒,我們要用的是smart_str。於是,我們的代碼也可以這樣寫:
from django.utils.encoding import smart_str
un = u"漢字"
# response.set_cookie("username", un) # UnicodeEncodeError!
un2 = smart_str(un)
response.set_cookie("user_name", un2) # OK
這樣寫,是不是更簡潔一些呢?