urllib2在图像URL上抛出UnicodeEncodeError

时间:2014-11-10 17:37:58

标签: python urllib2

我的应用程序需要获取图像网址,检查它们是否实际指向图像,然后再做一些事情。 Bellow是我检查URL有效的方法。

 @staticmethod
  def urlReturnsOK(url):
    """ Check that the given URL links to an existing image, return false if not """

    try:
      response = urllib2.urlopen(url)
      if response.code == 200:
        return True
    except urllib2.HTTPError, e:
      logging.debug('Testing URL: %s returned HTTPError %s' % (url, e.code))
    except urllib2.URLError, e:
      logging.debug('Testing URL: %s returned URLError %s' % (url, e.args))
    except UnicodeEncodeError, e:
      logging.debug("THIS CAUSES PROBLEMS +++++++++ %s "% url)

    return False

在某些网址上(所有网址都指向图片,假设它们是正确的)我得到以下异常:

  

UnicodeEncodeError:'ascii'编解码器无法对字符u'\ xe9'进行编码   第49位:序数不在范围内(128)

添加expect子句时,我可以看到一个导致问题的URL就是这个(注意非标准字母):

http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1 /BustAntonioGutiérrezdeOteroySantayana.PNG/ 200像素-BustAntonioGutiérrezdeOteroySantayana.PNG

接下来尝试调试时,我在python脚本中执行以下操作:

>>> import urllib2
>>> response = urllib2.urlopen('http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/BustAntonioGutiérrezdeOteroySantayana.PNG/200px-BustAntonioGutiérrezdeOteroySantayana.PNG')
>>> print response.code
200
>>> 

此时我不确定我需要更改什么,并且无法解释为什么该方法适用于控制台,而不是我的代码。我假设问题出在非标准字母上,但不知道如何修复它。有什么建议吗?

更新

正如有人建议的那样,这个问题已经得到了解答,虽然我仍然不明白为什么打开控制台的链接有效?

0 个答案:

没有答案