作者ya790206 (残云夺月)
看板Python
标题Re: [问题] 关於处理URL解码问题
时间Mon Jun 2 19:21:22 2008
※ 引述《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
1F:推 Josh0821:感谢 测试ok 因输入为utf-8输出为unicode 所以稍作修改 06/02 19:47