我正在运行以下代码,试图在某些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。
答案 0 :(得分:1)
如果您尝试将str
转换为unicode
,则需要使用html.decode
,而不是encode
。
旧的,糟糕的建议:另外,既然你在那里似乎有一个BOM,你可能
想要使用'utf_8_sig'
作为编码,这将在解码时剥离BOM。
新的,更好的建议:实际上,从输出中查看所有\x00
以及BOM,看起来更像编码实际上是UTF-16,而不是UTF -8。因此,html.decode('utf-16')
应该是最佳选择。