2009-10-29 21 views
10

私はPythonでプログラミングしており、ウェブページからurllib2ライブラリを通じて情報を取得しています。PythonでUnicode(非ASCII)文字を扱う方法は?

File "c:\Python25\lib\httplib.py", line 711, in send 
    self.sock.sendall(str) 
File "<string>", line 1, in sendall: 
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xf1' in position 74: ordinal not in range(128) 

は私が対処する必要があります。問題は、そのページはこの文字を取得する瞬間urllib2でなど'ñ''á'、のように、それはこのように、例外を引き起こし、非ASCII文字を私に提供することができるということですそれらの文字。つまり、私は例外を処理するのではなく、プログラムを続行したいと思っています。たとえば、(これが何かばかげているかどうかわかりません)、ASCIIではなくcodecを使用する方法はありますか?これらの文字で作業する必要があるので、データベースなどに挿入してください。

+0

Python 3以降やそれ以前のものを使用しているかどうかは言うまでもなく役に立ちます。 –

+0

urllib2モジュールが削除されているため(urllibにラップされているため)Py3kできません... –

+0

重複:http://stackoverflow.com/questions/1020892/python-urllib2-read-to-unicode –

答えて

9

ソケットからバイトセットを読み込むだけです。あなたは、あなたがそれをデコードする必要がある文字列たい場合:

outbytes = yourstring.encode("utf-8") 

yourstring = receivedbytes.decode("utf-8") 

(あなたがutf-8のために使っているものは何でもエンコーディング代用)

を次に、あなたが外に戻ってそれを送信するために逆を行う必要があります

6

できればすべての作業にユニコードを使用したいと思います。

おそらく便利答える/この質問を見つける:

urllib2 read to Unicode

0

あなたがこの情報を見つけるために、実際の構文解析ライブラリを使用してに見たいと思うかもしれません。たとえば、lxmlは、すでに宣言された文字セットを使用してUnicodeエンコード/デコードを処理します。

+0

残念ながら、多くのウェブサイトでは不適切にエンコードされたドキュメントが生成されていますが、一般的にエンコードはほとんど正しいでしょうが、散発的な無効なバイトシーケンスがあります。一部のアプリケーションではこれを心配する必要はありませんが、ランダムな公開Webサイトをクロールする場合は問題になります。 – mikerobi

関連する問題