【问题标题】:Python encode url with special charactersPython用特殊字符编码url
【发布时间】:2014-09-17 06:03:36
【问题描述】:

我想用特殊字符对 URL 进行编码。就我而言,它是:š, ä, õ, æ, ø(它不是一个有限列表)。

urllib2.quote(symbol) 给出了非常奇怪的结果,这是不正确的。这些符号还能如何编码?

【问题讨论】:

  • 预期的编码结果是什么?
  • "这不是一个有限列表" 我可能想挑战这个陈述,因为可能的 unicode 字符列表是有限的。 ;-) 另外,@falsetru 说了什么。我得到urllib2.quote('ä') == '%C3%A4',这是正确的。
  • urllib2.quote("Grønlandsleiret, Oslo, Norway") 给出了 %27Gr%B8nlandsleiret%2C%20Oslo%2C%20Norway%27 我向 Google Maps (maps.googleapis.com/maps/api/geocode/…) 我提出了一个请求获取无效请求作为响应。
  • @Bob, urllib2.quote("Grønlandsleiret, Oslo, Norway") 为我返回 'Gr%C3%B8nlandsleiret%2C%20Oslo%2C%20Norway'。并访问相应的 url 显示有效的响应:maps.googleapis.com/maps/api/geocode/…
  • 我使用的是 Python 2.7.8。这可能是个问题吗?

标签: python urlencode


【解决方案1】:

urllib2.quote("Grønlandsleiret, Oslo, Norway") 给出一个%27Gr%B8nlandsleiret%2C%20Oslo%2C%20Norway%27

然后明确使用 UTF-8:

urllib2.quote(u"Grønlandsleiret, Oslo, Norway".encode('UTF-8'))

并始终在文件中说明编码。见PEP 0263


非UTF-8字符串需要先解码,再编码:

                           # You've got a str "s".
s = s.decode('latin-1')    # (or what the encoding might be …)
                           # Now "s" is a unicode object.
s = s.encode('utf-8')      # Encode as UTF-8 string.
                           # Now "s" is a str again.
s = urllib2.quote(s)       # URL encode.
                           # Now "s" is encoded the way you need it.

【讨论】:

  • 有效! encode('UTF-8') 是我正在寻找的。​​span>
  • 问题:如果我有一个地址作为变量,那么 urllib2.quote('u' + address.encode('UTF-8')) 会给出错误 -> UnicodeDecodeError: 'ascii' codec无法解码位置 6 中的字节 0xe4:序数不在范围内 (128)。我该怎么办?
猜你喜欢
  • 2016-10-19
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多