如何在google app引擎中对我的url参数进行编码?

时间:2011-12-10 01:08:49

标签: python urllib

我使用python进行地理编码,我认为我需要使用urllencode对变量region进行编码,以便它可以处理包含空格和其他特殊字符的内容:

url = urllib.urlencode('http://maps.googleapis.com/maps/api/geocode/json?address='+region+'&sensor=false')
logging.info('url:'+url)
result = urlfetch.fetch(url)

当变量区域包含空格

时,它会生成错误日志
Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~montaoproject/pricehandling.355268396595012751/in.py", line 153, in get
    url = urllib.urlencode('http://maps.googleapis.com/maps/api/geocode/json?address='+region+'&sensor=false')
  File "/base/python27_runtime/python27_dist/lib/python2.7/urllib.py", line 1275, in urlencode
    raise TypeError
TypeError: not a valid non-string sequence or mapping object

背景是另一个问题,我问我在哪里遇到问题我觉得代码有效但不适用于两个或更多单词的区域,即带有空格的名称。

https://stackoverflow.com/questions/8441063/how-should-i-use-urlfetch-here

在制作时我使用了另一个变量。我认为它有空白并不重要。当我尝试不包含空格的变量时,它可以工作。 那么请你告诉我如何编码url变量来承认空格和其他“特殊”字符?

谢谢

2 个答案:

答案 0 :(得分:6)

只需对您的查询字符串部分进行编码

像:

param = {"address" : region,
        "sensor" : "false"
        }

param = [("address", region), ("sensor", "false")]

然后

encoded_param = urllib.urlencode(param)
url = 'http://maps.googleapis.com/maps/api/geocode/json'
url = url + '?' + encoded_param
result = urlfetch.fetch(url)

答案 1 :(得分:1)

使用urllib.pathname2url,它直接在单个字符串值上工作,不需要字典