開發環境:Ubuntu16.04+Django 1.11.9+Python2.7
在開發中,在做查找某些信息這個功能的時候,遇到的一個問題。需要在URL中傳遞查找的關鍵字,當關鍵字為中文的時候,並不友好.
在開發中,在做查找某些信息這個功能的時候,遇到的一個問題。需要在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/',里面對應的值,就可以知道結果為何出現.