作者Josh0821 (JoStudio)
看板Python
標題[問題] 關於處理URL解碼問題
時間Mon Jun 2 16:46:15 2008
在處理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
推 ya790206:unicode('中文字','big5').encode('utf-8') 試試這吧 06/02 17:43
→ Josh0821:source是URL 也就是%25E4%25B8%25AD這些東西 06/02 18:53
→ Josh0821:所以無論用encode decode怎麼轉還是一樣 06/02 18:54
推 ya790206:urllib.urlencode({'p':a})之後再用這個函數 06/02 19:04
→ ya790206:我看錯問題了,別理我,看你要不要修掉推文 06/02 19:07