UnicodeDecodeError: 'utf8' コーデックはバイト 0x9c をデコードできません 質問する

UnicodeDecodeError: 'utf8' コーデックはバイト 0x9c をデコードできません 質問する

クライアントから UTF-8 の有効な文字を受信するソケット サーバーがあります。

問題は、一部のクライアント (主にハッカー) が間違った種類のデータを送信していることです。

正規のクライアントは簡単に見分けられますが、送信されたすべてのデータをファイルに記録して、後で分析できるようにしています。

œ時々、エラーの原因となるこのような文字が表示されますUnicodeDecodeError

これらの文字の有無にかかわらず、文字列を UTF-8 にできる必要があります。


アップデート:

私の場合、ソケット サービスは MTA だったので、次のような ASCII コマンドのみを受信することを期待しています。

EHLO example.com
MAIL FROM: <[email protected]>
...

私はこれらすべてを JSON で記録していました。

その後、善意のない何人かの人々があらゆる種類の迷惑メールを送ることにしました。

そのため、私の特定のケースでは、非 ASCII 文字を削除してもまったく問題ありません。

ベストアンサー1

http://docs.python.org/howto/unicode.html#the-unicode-type

str = unicode(str, errors='replace')

または

str = unicode(str, errors='ignore')

注: これにより、問題の文字が削除 (無視) され、それらの文字のない文字列が返されます。

私にとっては、これは理想的なケースです。アプリケーションで許可されていない非 ASCII 入力に対する保護として使用しているためです。

またはcodecsファイルを読み込むモジュール:

import codecs
with codecs.open(file_name, 'r', encoding='utf-8',
                 errors='ignore') as fdata:

おすすめ記事