如何在Python中使用主域名(不是params)上的非unicode字符请求URL?

时间:2012-03-27 09:56:13

标签: python unicode urllib2 urlopen

我无法使用urllib2.urlopen()请求网址“http://www.besondere-raumdüfte.de”。
我尝试使用urllib.urlencode编码字符串与utf-8,idna,ascii但仍然无法正常工作。
提高URLError: <urlopen error unknown url type

2 个答案:

答案 0 :(得分:2)

您需要的是u"http://www.besondere-raumdüfte.de/".encode('idna')。请注意源字符串是如何Unicode常量(u前缀)。

结果是一个可与urlopen()一起使用的网址。

如果您的域名包含非ASCII字符,则网址的其余部分包含非ASCII字符,您需要.encode('idna')域部分和iri2uri()其余的。

答案 1 :(得分:0)

您正在使用iri而不是uri,您需要做的就是正确转换它。以下是如何执行此操作的示例:

from httplib2 import iri2uri

def iri_to_uri(iri):
    """Transform a unicode iri into a ascii uri."""
    if not isinstance(iri, unicode):
        raise TypeError('iri %r should be unicode.' % iri)
    return bytes(iri2uri(iri))

一旦你有了uri,你应该可以使用urllib2。