1. ホーム
  2. python

[解決済み] UnicodeDecodeError: 'utf8'コーデックはバイト0x9cをデコードできません。

2022-03-15 02:36:47

質問

クライアントからUTF-8の有効な文字を受け取ることになっているソケットサーバーがあります。

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

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

時々、次のような文字が表示されます。 œ を使用すると UnicodeDecodeError というエラーが発生します。

これらの文字があってもなくても、文字列をUTF-8にできるようにしてほしい。


更新しました。

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

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

これを全部JSONで記録していたんです。

すると、善意のない一部の人たちが、あらゆる種類のジャンクを送ることにしたんです。

だから、私の場合は、ASCII以外の文字を削除してもまったく問題ないのです。

解決方法は?

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

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

または

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

これは、問題の文字を除去(無視)して、文字なしの文字列を返します。

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

あるいは のopenメソッドを使用します。 codecs モジュールで読み込むことができます。

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