Re: [問題] 關於處理URL解碼問題

看板Python作者 (殘雲奪月)時間17年前 (2008/06/02 19:21), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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

06/02 19:47, , 1F
感謝 測試ok 因輸入為utf-8輸出為unicode 所以稍作修改
06/02 19:47, 1F
文章代碼(AID): #18GzUpNE (Python)
討論串 (同標題文章)
文章代碼(AID): #18GzUpNE (Python)