python - 在 Python 2.6.5 中,是否有可以用于 urllib.quote 和 urllib.unquote 的 unicode 替代品?

标签 python unicode urllib

Python 的 urllib.quoteurllib.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'

有什么建议吗?

最佳答案

Python's urllib.quote and urllib.unquote do not handle Unicode correctly

urllib 根本不处理 Unicode。根据定义,URL 不包含非 ASCII 字符。当您处理 urllib 时,您应该只使用字节字符串。如果您希望它们代表 Unicode 字符,则必须手动对其进行编码和解码。

IRIs可以包含非 ASCII 字符,将它们编码为 UTF-8 序列,但 Python 在这一点上没有 irilib

Encoding the value to UTF8 also does not work:

In [6]: print urllib.unquote(urllib.quote(u'Cataño'.encode('utf8')))
Cataño

啊,现在您在控制台中输入 Unicode,并在控制台中执行 print-Unicode。这通常是不可靠的,尤其是在 Windows 和您的情况下 with the IPython console .

用反斜杠序列将它输入很长的路,您可以更容易地看到 urllib 位确实有效:

>>> u'Cata\u00F1o'.encode('utf-8')
'Cata\xC3\xB1o'
>>> urllib.quote(_)
'Cata%C3%B1o'

>>> urllib.unquote(_)
'Cata\xC3\xB1o'
>>> _.decode('utf-8')
u'Cata\xF1o'

关于python - 在 Python 2.6.5 中,是否有可以用于 urllib.quote 和 urllib.unquote 的 unicode 替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5557849/

相关文章:

python - 查找多个 DataFrame Python 中数字的最大值

python - 如何导入*.pyd文件python(Linux机器)

ruby - 如何将 unicode 单词与 ruby​​ 1.9 匹配?

python - 是否可以使用 requests.get 命令仅获取 header 而不获取正文?服务器正在阻塞 HEAD

python - 用Python读取复杂的文本文件

python - Unicode编码/解码

python - 在Python中从SPSS访问标签时如何处理特殊字符?

python - HTTP 基本身份验证在 python 脚本中失败

python - 如何将字节值转换为字符串值

Python - 对于 url,如何检查网络服务器是否可用或存在? (使困惑)