1. 程式人生 > >Django 中接收 URL 中的中文引數

Django 中接收 URL 中的中文引數

前幾天改造我那個電子課程表時,有個 URL 傳遞的引數我直接用了中文,像這樣:/tt/getxml/?term=2008春。在 IE 中使用很正常,在 Django 裡面接收之後用 request.GET.get('term') 直接就可以得到“2008春”。但是後來我用 FF 和 Safari 測試的時候就不行了。研究了一下發現還是得編碼成 UTF-8 的形式傳遞才行。

  在客戶端用 Javascript 生成 URL 時,用 encodeURI('2008春') 編碼一下形成:/tt/getxml/?term=%E6%98%A5。然後再在 Django 那端用 urllib.unquote(request.GET.get('term')).decode('utf8') 接收就正常了。

  另外,用 Django 的 ORM 讀取資料庫,並且與 Python 自帶的 xml.dom 一起來生成 XML 資料時,有中文的時候就不正常。主要還是編碼問題。比如 term.name 是中文的,那麼就要用 str(term.name).decode('utf-8') 來寫入 xml.dom 生成的結點中,最後用 obj.toxml('utf-8') 來輸出 XML 的內容。這樣得出的 XML 是 UTF-8 編碼的,並且在頭那裡會有一個 encoding="utf-8" 的屬性,這個 XML 才能正確被其它地方解析。