在Python中,如何在主域名(非参数)上使用非unicode carachters请求url?
我无法请求url“http://www.besondere-raumd带有urllib2.urlopen()的“fte.de”在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
我尝试使用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是最常见的错误之一,我自己做过很多次。)