ソケット データ内の無効な UTF-8 文字の処理
ソケット接続を介してクライアントから UTF-8 文字を受信する場合、無効な文字が原因で UnicodeDecodeError 例外が発生します。これは、意図的に無効なデータを送信する悪意のあるクライアントからのデータを処理する場合に特に困難になる可能性があります。
この問題を解決するには、Python の Unicode 関数を使用できます。
str = unicode(str, errors='replace')
次のように 'replace' を指定します。エラー処理戦略として、Python は無効な文字を置換文字で置き換え、文字列から効果的に削除します。
あるいは、'ignore' を使用して単に無効な文字を破棄することもできます。
str = unicode(str, errors='ignore')
このアプローチは、元のデータを保持する必要がなく、有効な UTF-8 文字のみが必要な状況に適しています。
たとえば、次のようにクライアントからの ASCII コマンドのみを期待する場合MTA の場合、「ignore」戦略を使用して非 ASCII 文字を取り除くことができます。
str = unicode(str, errors='ignore')
これにより、結果の文字列には有効な ASCII 文字のみが含まれることが保証され、悪意のある入力からアプリケーションを保護します。
さらに、コーデック モジュールを利用して、無効な UTF-8 文字を含むファイルを読み取ることができます。
import codecs with codecs.open(file_name, 'r', encoding='utf-8', errors='ignore') as fdata:
エラー処理戦略として「ignore」を指定すると、コーデックは無効な文字を自動的に破棄します。ファイルの読み取り中。
以上がソケットデータ内の無効な UTF-8 文字を処理するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。