【Django】URL中傳遞中文的問題

 開發環境:Ubuntu16.04+Django 1.11.9+Python2.7

在開發中,在作查找某些信息這個功能的時候,遇到的一個問題。須要在URL中傳遞查找的關鍵字,當關鍵字爲中文的時候,並不友好.
 
當輸入關鍵字爲中文(這裏我輸入的是'第一次')的時候,接收到參數是這樣的
%E7%AC%AC%E4%B8%80%E6%AC%A1
這樣格式的是通過urlencode後的中文,既然這樣就須要進行url解碼.
import urllib c='%E7%AC%AC%E4%B8%80%E6%AC%A1' e=urllib.unquote(c) c='1' f=urllib.unquote(c) print e #輸出結果: 第一次
print f # 輸出結果: 1

上面的代碼是在Windows下Pycharm裏測試輸出的,結果符合預期.前端

在開發代碼中寫入後,使用postman進行測試的時候,是能夠的.但當和前端頁面進行聯合調試的時候,就出現了問題.post

import urllib def select_seller(request,keyword): logging.debug(keyword)       #logging.debug 接收到的參數%E7%AC%AC%E4%B8%80%E6%AC%A1
    keyword = urllib.unquote(keyword) logging.debug(keyword)       # 解碼後:第ä¸<80>次
接收到的參數,解碼後竟然是‘第ä¸<80>次’這樣的,這樣的結果確定不符合預期.
 對於輸出這樣的結果,第一個猜想是類型問題。使用type()來輸出結果的時候,
import urllib def select_seller(request,keyword): logging.debug(type(keyword)) #<type 'unicode'>  
    keyword = urllib.unquote(keyword)   

 因此解決辦法,是使用str()將接收到的參數轉化爲str類型測試

import urllib def select_seller(request,keyword): logging.debug(type(keyword))    # <type 'unicode'>
    keyword = urllib.unquote(keyword) logging.debug(keyword)     # 解碼後:第ä¸<80>次
    keyword = str(keyword) logging.debug(type(keyword))    # <type 'str'>
    keyword = urllib.unquote(keyword) logging.debug(keyword)     # 解碼後:第一次 

這樣結果就是符合預期的中文關鍵字,能夠進行下一步的操做了.url

至於上面的亂碼問題,由於接收到的參數是Unicode類型,urllib.unquote()處理後,依然是Unicode類型.可是把接收到參數中的」%」替換成了’\x’,變成了ascii碼字符串,能夠參考'https://www.ascii-code.com/',裏面對應的值,就能夠知道結果爲什麼出現.spa

相關文章
相關標籤/搜索