為什麼這篇Python url解碼鄉民發文收入到精華區:因為在Python url解碼這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者ya790206 (殘雲奪月)看板Python標題Re: [問題] 關於處理URL解碼問題時間M...
※ 引述《Josh0821 (JoStudio)》之銘言:
: 在處理url網址時 常會使用urllib.unquote來解
: 例如將 %22%27%3C%3E%5B%5C%5D%5E%60%7B%7D 解為"'/<>[\]^`{}
: (原始字串為%2522%2527/%253C%253E%255B%255C%255D%255E%2560%257B%257D
: 所以要解兩次)
: 不過遇到大於127以後的字元 就會有很大的問題
: 例如輸入中文字串 "中文測試"
: 會變成%25E4%25B8%25AD%25E6%2596%2587%25E6%25B8%25AC%25E8%25A9%25A6
: 經過一次解碼成為%E4%B8%AD%E6%96%87%E6%B8%AC%E8%A9%A6
: 如果不經處理 在使用一次urllib.unquote會出現超過範圍的錯誤
: 因此要對字串重新編碼為unicode
: 使用unicode(str) or str.decode('UTF8')
: 但是解碼結果會將每一個獨立的字元解出來
: 也就是%E4變成ä %B8變成¸-
: 而不是將%E4%B8%AD解成'中'
: 網路上搜尋很久 一般是說將字串加上.decode('UTF8') 可是這只對少部份字元有效
: 要如何有要針對中文來處理...
: 補一個unquote的實做
: def htc(m):
: return unichr(int(m.group(1),16))
: def unquote(url):
: rex=re.compile('%([0-9A-H][0-9A-H])',re.I)
: return rex.sub(htc,url)
: 照理說修改正規語言的規則及UTF-8的對應關係 應該是可行
: 只是搞了很久一直弄不出來 網路上搜尋也一直沒找到解法
: 不知道版上有沒有 有經驗的前輩指點一下..感謝
你試試這段程式碼吧,我測試過可以
# -*- coding: big5-*-
import urllib
c='%25E4%25B8%25AD%25E6%2596%2587%25E6%25B8%25AC%25E8%25A9%25A6'
a=unicode(urllib.unquote(c),'utf-8').encode('big5')
a=unicode(urllib.unquote(a),'utf-8').encode('big5')
print a
推文沒看清題意就亂推~抱歉
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.120.222.45