在Python中,如何在主域名(非参数)上使用非unicode carachters请求url?

在Python中,如何在主域名(非参数)上使用非unicode carachters请求url?,python,unicode,urllib2,urlopen,Python,Unicode,Urllib2,Urlopen,我无法请求url“http://www.besondere-raumd带有urllib2.urlopen()的“fte.de” 我尝试使用urllib.urlencode和utf-8、idna、ascii对字符串进行编码,但仍然不起作用引发URLError:您使用的是一个而不是一个,您需要做的是正确地转换它。下面是一个如何执行此操作的示例: from httplib2 import iri2uri def iri_to_uri(iri): """Transform a unicode

我无法请求url“http://www.besondere-raumd带有urllib2.urlopen()的“fte.de”
我尝试使用urllib.urlencode和utf-8、idna、ascii对字符串进行编码,但仍然不起作用
引发
URLError:您使用的是一个而不是一个,您需要做的是正确地转换它。下面是一个如何执行此操作的示例:

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。

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

结果是一个可用于
urlopen()
的URL


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

“ü”不是“非unicode字符”。几乎没有任何字符符合“非unicode字符”的条件,因为unicode几乎涵盖了所有字符。这是一个“非ASCII字符”。为了检查,我尝试了
urllib2.urlopen(字节)(iri2uri()http://www.besondere-raumd)
但给出了错误:URLError:你可能在防火墙后面,看一看有趣的,但这是因为我忘记在字符串quot:)前面加u,因为我把它放在了前面。我猜u将字符串定义为unicode字符串。谢谢。谢谢你的工作,我记得我试着用“idna”和urllib2进行编码。URL在开头没有u的情况下打开字符串,但是字符串前面的“u”对smth很重要。@AbdyresulCharyev:哦,是的,用字节字符串代替Unicode sting是最常见的错误之一,我自己做过很多次。)