ホームページ > バックエンド開発 > Python チュートリアル > UTF-8 では「UnicodeDecodeError: Invalid Continuation Byte」が発生し、Latin-1 では発生しないのはなぜですか?

UTF-8 では「UnicodeDecodeError: Invalid Continuation Byte」が発生し、Latin-1 では発生しないのはなぜですか?

Susan Sarandon
リリース: 2024-11-27 08:13:14
オリジナル
482 人が閲覧しました

Why Does `UnicodeDecodeError: Invalid Continuation Byte` Occur with UTF-8, But Not Latin-1?

UnicodeDecodeError: 無効な継続バイトのトラブルシューティング

「UnicodeDecodeError: 'utf8' コーデックはバイトをデコードできません無効な継続バイト、 「根本的な原因を特定することが重要です。この例では、UTF-8 を使用してエンコードされた文字を含む特定の文字列をデコードしようとすると問題が発生します。

文字 xe9 は、UTF-8 エンコードの文字「é」を表します。これを正しくデコードするには、この UTF-8 文字をサポートする適切なデコーダを使用する必要があります。ただし、エラーが示すように、この場合、デフォルトの「utf-8」デコーダは継続バイトを適切に処理できません。

「Latin-1」コーデックで成功するのはなぜですか?

ISO-8859-1 としても知られる「latin-1」コーデックは、 「エ」の文字。代わりに、バイト xe9 を文字「í」にマップします。これには継続バイトは必要ありません。

したがって、「latin-1」コーデックを使用すると、デコーダはバイト xe9 を「í」として正しく解釈します。 " そして、エラーなしで文字列 "a test of í char" を返します。

問題

元の文字列の「UnicodeDecodeError」を解決するには、UTF-8 エンコーディングをサポートするデコーダを使用する必要があります。たとえば、デフォルトの「utf-8」デコーダの代わりに、UTF-8 用に特別に設計された「u8」デコーダを使用できます。

v = o.decode("u8")
ログイン後にコピー

あるいは、ラテン語を使用するように文字列を変更できます。 1 UTF-8 コード化文字を Latin-1 相当の文字に置き換えることによるエンコード:

o = "a test of í char"
ログイン後にコピー

適切なデコーダまたはエンコードを使用することにより、文字列「UnicodeDecodeError:無効な継続バイト」エラーが発生することなく、正常にデコードできます。

以上がUTF-8 では「UnicodeDecodeError: Invalid Continuation Byte」が発生し、Latin-1 では発生しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート