【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進行測試的時候,是可以的.但當和前端頁面進行聯合調試的時候,就出現了問題.

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)     # 解碼后:第一次 

這樣結果就是符合預期的中文關鍵字,可以進行下一步的操作了.

至於上面的亂碼問題,因為接收到的參數是Unicode類型,urllib.unquote()處理后,依然是Unicode類型.但是把接收到參數中的”%”替換成了’\x’,變成了ascii碼字符串,可以參考'https://www.ascii-code.com/',里面對應的值,就可以知道結果為何出現.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM