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

看板Python作者 (JoStudio)時間17年前 (2008/06/02 16:46), 編輯推噓2(203)
留言5則, 2人參與, 最新討論串1/2 (看更多)
在處理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的對應關係 應該是可行 只是搞了很久一直弄不出來 網路上搜尋也一直沒找到解法 不知道版上有沒有 有經驗的前輩指點一下..感謝 -- ◢███◢███◢███◢███ █████████████▂▂███◤ ████████████████████ ███████◤████████ ◣◤ ◢██████▊██◢▆██████▊ ◥██◤ █████◤█████◤█████◤███▊ξJoshuaζ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 134.208.2.215

06/02 17:43, , 1F
unicode('中文字','big5').encode('utf-8') 試試這吧
06/02 17:43, 1F

06/02 18:53, , 2F
source是URL 也就是%25E4%25B8%25AD這些東西
06/02 18:53, 2F

06/02 18:54, , 3F
所以無論用encode decode怎麼轉還是一樣
06/02 18:54, 3F

06/02 19:04, , 4F
urllib.urlencode({'p':a})之後再用這個函數
06/02 19:04, 4F

06/02 19:07, , 5F
我看錯問題了,別理我,看你要不要修掉推文
06/02 19:07, 5F
文章代碼(AID): #18GxDSr1 (Python)
討論串 (同標題文章)
文章代碼(AID): #18GxDSr1 (Python)