Skip to main content
 首页 » 编程设计

python之从 urllib 请求中获取 unicode

2025年05月04日12think

我正在运行以下代码,试图在某些 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。

请您参考如下方法:

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

较旧的错误建议:此外,由于您似乎在开头就有 BOM,因此您可能 想使用 'utf_8_sig' 作为编码,这将在解码时去除 BOM。

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