无法用Python打开Unicode URL
我在使用Python 2.5.2和Linux Debian,想从一个包含西班牙字符'í'
的西班牙网址获取内容:
import urllib
url = u'http://mydomain.es/índice.html'
content = urllib.urlopen(url).read()
但是我遇到了这个错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 8: ordinal not in range(128)
在把网址传给urllib之前,我试过这样做:
url = urllib.quote(url)
还有这样:
url = url.encode('UTF-8')
但是都没有成功。
你能告诉我我哪里做错了吗?
5 个回答
4
把网址编码成utf-8应该是可以的。我在想你的源文件是不是编码正确,以及解释器是否知道这一点。例如,如果你的Python源文件是以UTF-8格式保存的,那么你应该在文件的第一行或第二行加上
# coding=UTF-8
这样就可以了。
import urllib
url = u'http://mydomain.es/índice.html'
content = urllib.urlopen(url.encode('utf-8')).read()
对我来说是有效的。
补充一下,要注意在交互式的Python环境中(无论是通过IDLE还是控制台),处理Unicode文本时会遇到很多编码方面的问题。在这种情况下,你应该使用Unicode字面量(比如在你的例子中用到的\u00ED)。
7
这个对我有效:
#!/usr/bin/env python
# define source file encoding, see: http://www.python.org/dev/peps/pep-0263/
# -*- coding: utf-8 -*-
import urllib
url = u'http://example.com/índice.html'
content = urllib.urlopen(url.encode("UTF-8")).read()