从urllib请求获取unicode

时间:2011-08-12 22:22:56

标签: python urllib

我正在运行以下代码,试图在某些HTML中查找特定信息。我有编码/解码问题,但我无法解决。

import urllib
req = urllib.urlopen('http://securities.stanford.edu/1046/AAI00_01/')
html = req.read()
type(html)
#   <type 'str'>
html.upper().find('HTML')
#   -1
print html[0:20]
#   ??<HTML><HE
html[0:10]
#   '\xff\xfe<\x00H\x00T\x00M\x00'
req.headers['content-type']
#   'text/html'
html = html.encode('utf-8')
#   Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
#   UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)

这个问题的解决方案是什么?我需要做的就是使用.find和正则表达式从页面中删除一些信息。

我正在使用Mac OSX并在终端内运行Python 2.6.1。

1 个答案:

答案 0 :(得分:1)

如果您尝试将str转换为unicode,则需要使用html.decode,而不是encode

旧的,糟糕的建议:另外,既然你在那里似乎有一个BOM,你可能 想要使用'utf_8_sig'作为编码,这将在解码时剥离BOM。

新的,更好的建议:实际上,从输出中查看所有\x00以及BOM,看起来更像编码实际上是UTF-16,而不是UTF -8。因此,html.decode('utf-16')应该是最佳选择。