【问题标题】:open persian url domains with urllib2使用 urllib2 打开波斯语 url 域
【发布时间】:2011-12-30 10:20:29
【问题描述】:

我正在尝试打开一个网址 http://الاعلي-لاتصالات.قطر/ar/news-events/event/future-internet-privacy 使用 urllib2.urlopen 但它总是报告错误。

类似的情况发生在http://الاعلي-للاتصالات.قطر/ar ...其他页面(中文页面)打开正常。

有什么想法可以让我找到打开这些网址的正确方法吗?

urllib2.urlopen("http://الاعلي-للاتصالات.قطر/ar/news-events/event/future-internet-privacy").read()

urllib2.urlopen('http://الاعلي-للاتصالات.قطر').read()

[已编辑] 错误是:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "/usr/lib/python2.6/urllib2.py", line 391, in open
    response = self._open(req, data)
  File "/usr/lib/python2.6/urllib2.py", line 409, in _open
    '_open', req)
  File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.6/urllib2.py", line 1170, in http_open
    return self.do_open(httplib.HTTPConnection, req)
  File "/usr/lib/python2.6/urllib2.py", line 1142, in do_open
    h.request(req.get_method(), req.get_selector(), req.data, headers)
  File "/usr/lib/python2.6/httplib.py", line 914, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.6/httplib.py", line 951, in _send_request
    self.endheaders()
  File "/usr/lib/python2.6/httplib.py", line 908, in endheaders
    self._send_output()
  File "/usr/lib/python2.6/httplib.py", line 780, in _send_output
    self.send(msg)
  File "/usr/lib/python2.6/httplib.py", line 759, in send
    self.sock.sendall(str)

我也尝试使用 u'http://الاعلي-للاتصالات.قطر'.encode('utf-8') 但结果 url 也无法打开。

【问题讨论】:

  • 需要弱编码。不知道如何在 Python 中做到这一点。 (不是我的语言。)
  • 我更新了显示控制台的错误。似乎无法解析url并报超时

标签: python url utf-8


【解决方案1】:

正如@Donal 所说,URL 必须是punycoded。幸运的是 Python 已经包含了这个。这是一个示例 Python 代码

domain = "الاعلي-للاتصالات.قطر"
domain_unicode = unicode(domain, "utf8")
domain_idna = domain_unicode.encode("idna")
urllib2.urlopen("http://" + domain_idna).read()

希望这会有所帮助。

【讨论】:

  • 注意这一点——它可能会变得有用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
相关资源
最近更新 更多