关于url的问题

关于url的问题

我在浏览器里面输入
http://127.0.0.1:8000/中国
浏览器就会把它转化成
http://127.0.0.1:8000/%D6%D0%B9%FA
然后发送给web server
0XD6D0 0XB9FA是“中国”的gbk编码
现在的问题是webserver如果可以知道%D6%D0%B9%FA这段文字的编码啊?
还有在server端这个解析是谁的任务啊?
啊,突然发现这个问题好像不应该发在这个论坛的。好象跟python无关啊。现在要用python做一个简单的webserver所以不由自主的发在这里。我对不起广大的人民群众。
一个汉字是两个字节
汉字url就是把一个汉字拆成两个字节存储
每个字节用16进制表示成字符串
比如“%D6%D0”
实际就是整数0xD0D6
把这个int值保存到一个C语言的char数组里再打印
就是一个‘中’字
我写了段代码来做这件事情

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python
#coding=utf8

import string

#parse_path用来把path中的汉字还原
#比如把http://127.0.0.1:8000/%D6%D0%B9%FA
#还原成http://127.0.0.1:8000/中国
def parse_path(path):
    for i in range(len(path) - 5):
        if path[i] == '%' == path[i+3] \
            and path[i+1] in string.hexdigits \
            and path[i+2] in string.hexdigits \
            and path[i+4] in string.hexdigits \
            and path[i+5] in string.hexdigits:

            a = chr(int('0x'+path[i+1:i+3], 16))
            b = chr(int('0x'+path[i+4:i+6], 16))
            path = ''.join([path[:i], a, b, parse_path(path[i+6:])])
            return path
    return path

if __name__ == '__main__':
    path = 'http://127.0.0.1:8000/%D6%D0%B9%FA'
    print parse_path(path)

大家指正一下。顺便看看有没有更好的办法。
urllib 有一个函数 unquote 可以做这事:

[Copy to clipboard] [ - ]
CODE:
>>> import urllib
>>> print urllib.unquote('http://127.0.0.1:8000/%D6%D0%B9%FA')
http://127.0.0.1:8000/中国

谢谢limodou。
顺便BS一下自己,今天有在文档里面看到那个函数的存在,不过没注意到是用来做这件事的。
把urllib里面的实现代码贴出来大家研究一下,果然比我写的帅多了。

[Copy to clipboard] [ - ]
CODE:
_hextochr = dict(('%02x' % i, chr(i)) for i in range(256))
_hextochr.update(('%02X' % i, chr(i)) for i in range(256))

def unquote(s):
    """unquote('abc%20def') -> 'abc def'."""
    res = s.split('%')
    for i in xrange(1, len(res)):
        item = res[i]
        try:
            res[i] = _hextochr[item[:2]] + item[2:]
        except KeyError:
            res[i] = '%' + item
    return "".join(res)