【发布时间】:2011-07-30 07:03:58
【问题描述】:
Python 的 urllib.quote 和 urllib.unquote 在 Python 2.6.5 中无法正确处理 Unicode。这就是发生的事情:
In [5]: print urllib.unquote(urllib.quote(u'Cataño'))
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
/home/kkinder/<ipython console> in <module>()
/usr/lib/python2.6/urllib.pyc in quote(s, safe)
1222 safe_map[c] = (c in safe) and c or ('%%%02X' % i)
1223 _safemaps[cachekey] = safe_map
-> 1224 res = map(safe_map.__getitem__, s)
1225 return ''.join(res)
1226
KeyError: u'\xc3'
将值编码为 UTF8 也不起作用:
In [6]: print urllib.unquote(urllib.quote(u'Cataño'.encode('utf8')))
Cataño
它被认为是一个错误和there is a fix,但不适用于我的 Python 版本。
我想要的是类似于 urllib.quote/urllib.unquote 的东西,但可以正确处理 unicode 变量,这样这段代码就可以工作:
decode_url(encode_url(u'Cataño')) == u'Cataño'
有什么建议吗?
【问题讨论】:
-
幸运的是,OP 似乎有些困惑:正如回溯所示,这确实是 2.6。
-
我不知道你到底发生了什么,但我将你的引用/取消引用示例逐字粘贴到我的解释器 python2.6 中,它正确打印了 Cataño。
-
啊,纳米,bobince 已经在下面回答了。