UTF-8 でエンコードされたデータを扱う場合、非準拠の文字を受信する状況が発生する可能性があります。 「UnicodeDecodeError: 'utf8' コーデックはバイト 0x9c をデコードできません」エラーが表示されます。このエラーは、特定のバイトを有効な Unicode 文字にデコードできないことを示します。
問題の理解
一部のクライアント、特に悪意のある攻撃者は、無効なデータを含むデータを送信する可能性があります。または間違った UTF-8 文字。これにより、デコード プロセスが中断され、エラーが発生する可能性があります。後の分析のためにデータをログに記録する場合など、特定の場合には、これらの問題のある文字を除外しながらデータを保持することが望ましいです。
問題の解決
これを解決するにはエラーが発生した場合は、次の方法を使用できます:
str = unicode(str, errors='replace')
str = unicode(str, errors='ignore')
ケース固有の解決策
Inソケット サービスが ASCII コマンドを期待する特定のケースでは、非 ASCII 文字を削除するのが適切です。これは、上で説明したように、無視エラー ハンドラーを使用して実現できます。
代替アプローチ
または、コーデック モジュールの open メソッドを使用してファイルを読み取ることもできます。指定されたエンコーディングとエラー処理を使用します。
import codecs with codecs.open(file_name, 'r', encoding='utf-8', errors='ignore') as fdata:
以上がUnicode 文字による UTF-8 デコード エラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。