2011-08-12 19 views
2

一部のHTMLで特定の情報を見つけるために、次のコードを実行しています。しかし、私は解決できないエンコード/デコードの問題を抱えています。urllibリクエストからユニコードを取得する

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をTerminal内から実行しています。

答えて

1

strから変換しようとしている場合は、unicodeにする必要があります。ではなく、html.decodeを使用します。

古い、悪いアドバイス:また、あなたがそこに先頭にBOMを持っているように見えることから、おそらく は、デコードにBOMを除去しますエンコーディングとして'utf_8_sig'を使用したいです。

新しい、より良いアドバイス:は実際に、BOMとともに、出力内のすべてのものを\x00年代を見てから、それはより多くのエンコーディングのように見えるが、実際にUTF-16ではなく、UTF-8です。だから、html.decode('utf-16')は行く方法です。

関連する問題