2016-03-21 12 views
0

UTF-32UnicodeDecodeError私が使用して、バイトタイプをデコードしようとすると、次のエラーを取得していますのPython 3.4を使用して

Traceback (most recent call last): 
    File "c:.\SharqBot.py", line 1130, in <module> 
    fullR=s.recv(1024).decode('utf-32').split('\r\n') 
UnicodeDecodeError: 'utf-32-le' codec can't decode bytes in position 0-3: codepoint not in range(0x110000) 

とUTF-16

にそれを解読しようとすると、以下の
File "c:.\SharqBot.py", line 1128, in <module> 
    fullR=s.recv(1024).decode('utf-16').split('\r\n') 
UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x0a in position 374: truncated data 

utf-8を使用してデコードすると、エラーは発生しません。

b':tmi.twitch.tv 001 absolutelyabot :Welcome, GLHF!\r\n:tmi.twitch.tv 002 absolutelyabot :Your host is tmi.twitch.tv\r\n:tmi.twitch.tv 003 absolutelyabot :This server is rather new\r\n:tmi.twitch.tv 004 absolutelyabot :-\r\n:tmi.twitch.tv 375 absolutelyabot :-\r\n:tmi.twitch.tv 372 absolutelyabot :You are in a maze of twisty passages, all alike.\r\n:tmi.twitch.tv 376 absolutelyabot :>\r\n' 

UTF-16にデコードしようとしたとき、私は何か間違ったことをやっているとします。■80

それは、次の受信ポートの攣縮IRCサーバirc.chat.twitch.tvに接続されたソケットであります32?私がutf-32を使用する理由は、utf-8にない文字を送信することがあり、utf-8がその文字をサポートしていないため、エラーを返す代わりにその文字を受信できるようにするためです。 ありがとうございました。 UTF-8としてdecode INGが動作していない場合

+0

たとえば 'decode( 'utf-8'、errors = 'replace')'を使用します。 –

+0

私はすべて一緒にエラーを回避しようとしていない、私はutf - 8でサポートされていない文字を受信しようとしている。 –

+0

したがって、UTF-8を使用して行全体をデコードすることができます。例外がスローされた場合は、*のみ、代替の文字セット*を試してください。私は組み込みNULのためにIRCプロトタイプがUTF-16,32 * ever *を許可するのではないかと疑う。 –

答えて

1

すべてユニコード序は、UTF-8で表すことができ、送信されるバイトは異なる符号化しているためです、またはデータが混在テキストとバイナリデータであります、そのうちいくつかはUTF-8です。オッズはテキスト UTF-8でエンコードされています(ほとんどのネットワークプロトコルがあります)。非UTF-8データはデータのフレーミングなどであり、テキストデータを抽出するために解析する必要があります。

テキスト/バイナリのケースでこのようなエラーをマスクする試みは、それを修正するのではなく、問題をサイレンシングするだけです。あなたは、データのエンコーディング(そして、1つのエンコーディングですべてのテキストデータでない場合はフォーマット)を知っている必要があります。受信したデータは、魔法のようにUTF-16またはUTF-32になることはありません。

+0

IRCはテキストエンコーディングを指定していない。 –

関連する問題