2012-04-03 22 views
1

私は、インターネット上の多くの人々がPythonの文字列エンコーディングに問題があることを表明していますが、何を試しても問題の解決方法を理解できないことを知っています。基本的には、TCPソケットを使用してWebサーバーに接続し、そのサーバーにHTTP要求を送信しています。レスポンスを一連のバッファに読み込んでデコードし、連結して完全なレスポンスを文字列として作成します。私が応答を得ると、私はUnicodeDecodingErrorsを得ています。私は多くの異なるウェブサイトに行く私のプログラムを使用したいので、私はそれを与える任意のサイトで動作するこの問題の任意のソリューションはありますか?Pythonのデコード/エンコーディングの問題

ありがとうございます。私はこれを行うとき

def getAllFromSocket(socket): 
    '''Reads all data from a socket and returns a string of it.''' 
    more_bytes = True 
    message = '' 
    if(socket!=None): 
     while(more_bytes): 
     buffer = socket.recv(1024) 
     if len(buffer) == 0: 
      more_bytes = False 
     else: 
      message += buffer.decode('utf-8') 
    return message 

ので:

いくつかのコードが

received_message = getAllFromSocket(my_sock) 

私が取得:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xd0 in position 1023: unexpected end of data 
+2

問題を示すサンプルコード/データがありますか? –

+1

youtubeのpycon 2012 unicodeを検索する。 Python2/3でユニコードの素晴らしいビデオがあります。 –

+1

おそらく 'Content-Type'ヘッダを解析して適切にデコードする必要があります。 "魔法"の解決策はありません(10万回解決された問題のために独自のコードを使用する代わりにライブラリを使用する場合を除く)。 –

答えて

1

あなたがUnicodeDammitを使用してデータのエンコーディングを探してみてくださいすることができます。 utf-8を取得していることを確認してください。また、エラーを無視するように選択することもできます。

buffer.decode("utf-8", "ignore") 
+1

データはUTF-8であるとは思われませんので、これは悪い回避策です。 –