我有以下网址“mysite.com网站/\u0422\u0435\u043A\u0441\u0442\u043D\u0430\u043A\u0438\u0440\u0438\u043B\u0438\u0446\u0430“(”mysite.com网站/Текст на кирилица"). 我想用打开这个网址浏览器.open(链接)浏览器所在位置
$CHandler = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
browser = urllib2.build_opener(CHandler)
user_agent = ' Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17'
browser.addheaders = [('User-agent', user_agent )]
urllib2.install_opener(browser)
但是我得到了一个错误:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 12-17: ordinal not in range(128)"
我从JSON得到这个URL。在
我如何解决这个问题?在
mysite.com/Текст на кирилица
不是URL:http://
(或其他)模式urllib2
不支持它们。在因此,您将需要修复中断,%-编码带外字符(如space->;
%20
),如果丢失,请添加架构,然后将IRI转换为URI。要进行此转换,您将需要使用IDN算法(Python:s.encode('idna')
)对地址的主机名部分进行编码,然后使用UTF-8对地址的其他部分中的任何非ASCII字符进行编码,然后使用%-编码。在你最终想要的是:
它是
urllib2
接受的有效URI,但当您跟随它时,它也会在浏览器的地址栏中显示为http://mysite.com/Текст на кирилица
。在关于实现IRI到URI的函数有很多(例如,大多数pythonweb框架都有类似的功能)。如果你想全力以赴纠正和规范化可疑的传入网址,还有this。在
相关问题 更多 >
编程相关推荐