質問:
「utf-8」コーデックを使用した文字列のデコード「UnicodeDecodeError: 無効な継続バイト」例外が発生しますが、成功します。 「latin-1」コーデック。なぜこのようなことが起こっているのでしょうか?
コード:
o = "a test of \xe9 char" v = o.decode("utf-8")
解決策:
UTF-8 とLatin-1 エンコーディング
UTF-8 エンコーディングLatin-1 はシングルバイトエンコーディングであるのに対し、文字を表すために複数のバイトを使用します。 Latin-1 では、バイト 0xe9 は文字 é を表します。
無効な継続バイト
UTF-8 では、バイト 0xe9 は次のことを示すために使用される継続バイトです。前のバイトはマルチバイト文字の一部です。ただし、この文字列では、バイト 0xe9 は分離されたバイトとして表示されます。これは UTF-8 では許可されません。
Latin-1 の使用
ため Latin-1 0xe9 を継続バイトではなく文字として解釈すると、デコードは「latin-1」コーデックで成功します。ただし、このアプローチは理想的ではありません。予想されるエンコーディングが実際に UTF-8 である場合にエラーが発生する可能性があります。
追加コンテキスト
このエラーは読み取り時に発生する可能性があります。エンコーディングを明示的に指定していないソースからのデータ、または Latin-1 エンコードを使用するレガシー システムで作業している場合data.
解決策:
この問題を解決するには、データのデコードとエンコードに正しいエンコードが使用されていることを確認してください。既知または予想される UTF-8 エンコーディングのファイルの場合は、ファイルを開いてテキストをデコードするときに UTF-8 を使用します。信頼できないソースまたは不明なエンコーディングのシステムから受信したデータの場合は、正しいエンコーディングを自動的に検出するために、「utf-8-sig」や「chardet」などのユニバーサル コーデックの使用を検討してください。
以上が「utf-8」で文字列をデコードすると、「latin-1」は成功するのに「UnicodeDecodeError: 無効な継続バイト」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。