Python编码-将非英语字符编码为URL

Python编码-将非英语字符编码为URL,python,python-2.7,encoding,geocoding,Python,Python 2.7,Encoding,Geocoding,我正在一点一点地写一个地理编码脚本。有一个丹麦(官方和免费)的web服务,我在URL中输入一个地址,并获得一个包含所有所需信息的json文件 当我的丹麦文字(æ,ø,å)进入URL时,我找不到正确的方法来翻译它们。 在这个示例中,我包含了两个不同的URL(包含地址信息)。 第一,街道是“Byvej”的地方很好,我得到了我期望在空闲时打印出来的结果。(我也可以得到lat/long) 另一条街道是“Bispegårdsvej”,没有闲置的东西。返回的列表为空。 url在浏览器中运行良好,我知道,我需

我正在一点一点地写一个地理编码脚本。有一个丹麦(官方和免费)的web服务,我在URL中输入一个地址,并获得一个包含所有所需信息的json文件

当我的丹麦文字(æ,ø,å)进入URL时,我找不到正确的方法来翻译它们。 在这个示例中,我包含了两个不同的URL(包含地址信息)。 第一,街道是“Byvej”的地方很好,我得到了我期望在空闲时打印出来的结果。(我也可以得到lat/long)

另一条街道是“Bispegårdsvej”,没有闲置的东西。返回的列表为空。 url在浏览器中运行良好,我知道,我需要在脚本中添加一些内容,但我找不到任何有效的内容

我正在使用ActivePython 2.7.2.5 谢谢 汤米


您需要使用百分比编码(也称为URL编码)对社交字符进行编码。百分比编码后,URL应如下所示:

http://geo.oiorest.dk/adresser.json?postnr=4320&vejnavn=Bispeg%C3%A5rdsvej&husnr=2
符合RFC 3987中定义的IRI到URI映射的Web服务在字符规范化后将使用utf-8进行编码,但您需要检查服务的文档以确定使用何种编码


Python在标准库中有urllib.quote()用于对字符串进行百分比编码,在标准库中有urllib.urlencode()用于对字典或两个元素元组的iterable进行百分比编码,以生成查询参数的字符串。

您必须正确编码特殊字符,例如:

如果您在这个字符串前面加上基本url,那么应该可以(至少我在浏览器中试过了)

如果您愿意获得第三方软件包,这将是一个流行的选择。 它将把事情简化为:

import requests
response = requests.get('http://geo.oiorest.dk/adresser.json',
                        params = dict(postnr=4320,
                                      vejnavn='Bispegårdsvej',
                                      husnr=2))
In[16]: urllib.urlencode([('postnr',4320),('vejnavn', 'Bispegårdsvej'), ('husnr',2)])
Out[16]: 'postnr=4320&vejnavn=Bispeg%C3%A5rdsvej&husnr=2'
import requests
response = requests.get('http://geo.oiorest.dk/adresser.json',
                        params = dict(postnr=4320,
                                      vejnavn='Bispegårdsvej',
                                      husnr=2))