urlencode並不會改變輸入的編碼格式, 缺省會將中文輸出為 gbk 編碼, 類似的, quote 會對中文進行 gbk 編碼
不過, 當遇到巢狀多層的字典時, 問題就來了, 中文會被 utf8 編碼, 原因是, 除去最外層的裡面整個字典會被認為是乙個字串, 當然, 沒有錯.
問題是, 內層字典中的中文鍵值會被轉換成utf8格式.
>>> from urllib importurlencode
>>> urlencode()
'n=%e4%bd%a0%e8%bf%98
'>>>輸出正常, 歲月靜好
>>> urlencode(})
'a=%7b%27n%27%3a+%27%5cxe4%5cxbd%5cxa0%5cxe8%5cxbf%5cx98%27%7d
'問題來了, 某些介面需要 gbk 編碼, 怎麼破?
現在, 假設有個很奇葩的介面, 它需要所有的引號都是雙引號%22, urlencode 預設輸出單引號%27, 所有的中文都是gbk.
有個說法, 你可以先 quote 再 urlencode, 但是, 有個潛在的坑是, quote 生成的 % 會被urlencode 翻譯成 %25
>>> from urllib importquote
>>> quote("你還"
)'%e4%bd%a0%e8%bf%98
'正常的輸出, 現世安穩
>>> urlencode(})
'a=%7b%27n%27%3a+%27%25e4%25bd%25a0%25e8%25bf%2598%27%7d
'迷之%25, 其實就是 %
比較簡單粗暴的做法
>>> urlencode(}).replace("25", "").replace("
27", "22"
)'a=%7b%22n%22%3a%22%e4%bd%a0%e8%bf%98%22%7d
'
python 3 就不會有這個問題, 除了還是把雙引號搞成了單引號
>>> from urllib.parse importurlencode
>>> urlencode(})
'a=%7b%27n%27%3a+%27%e4%bd%a0%e8%bf%98%27%7d
'
為什麼要用urlEncode編碼
之所以使用它進行編碼,是因為當字串資料以url的形式傳遞給web伺服器時,字串中是不允許出現空格和特殊 字元的 這句話意思是不是 1.字串中如果有空格或者特殊字元,傳輸就會出現錯誤.要想讓伺服器不出錯,正常顯示空格和特殊字元的話,就必須使用server.urlencode編碼來傳輸.是這個意思嗎?2...
OC 對 URL 進行 URLEncode 編碼
我們在專案中是使用的 asihttprequest 元件來訪問 url 的,在使用 asiformdatarequest 時發出它其中有乙個方法 nsstring encodeurl nsstring string cfstringconvertnsstringencodingtoencoding ...
URLEncode類解決URL中文亂碼
在開發中,經常會用到url傳遞中文引數,在接收引數時,會有接收到亂碼情況,我們在專案中通過urlencode來實現轉碼 package com.common public class urlencode private final static byte val 編碼 param s return ...