urlencode遇到中文編碼問題

2022-08-29 03:51:07 字數 1197 閱讀 7296

urlencode並不會改變輸入的編碼格式, 缺省會將中文輸出為 gbk 編碼, 類似的, quote 會對中文進行 gbk 編碼

不過, 當遇到巢狀多層的字典時, 問題就來了, 中文會被 utf8 編碼, 原因是, 除去最外層的裡面整個字典會被認為是乙個字串, 當然, 沒有錯.

問題是, 內層字典中的中文鍵值會被轉換成utf8格式.

>>> from urllib import

urlencode

>>> 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 import

quote

>>> 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 import

urlencode

>>> 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 ...