作者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
1F:推 ya790206:unicode('中文字','big5').encode('utf-8') 试试这吧 06/02 17:43
2F:→ Josh0821:source是URL 也就是%25E4%25B8%25AD这些东西 06/02 18:53
3F:→ Josh0821:所以无论用encode decode怎麽转还是一样 06/02 18:54
4F:推 ya790206:urllib.urlencode({'p':a})之後再用这个函数 06/02 19:04
5F:→ ya790206:我看错问题了,别理我,看你要不要修掉推文 06/02 19:07