クライアントから 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: