JavaScript の atob を使用して Base64 をデコードすると、utf-8 文字列が正しくデコードされません
JavaScript の window.atob() 関数では、 1 バイト以上を占める文字を処理する場合、UTF-8 文字列が正しくデコードされず、代わりに ASCII エンコード文字が生成されます。
Unicode の問題
JavaScript 文字列がエンコードされているbtoa() は入力としてバイナリ データを期待します。特殊文字や外国文字など、1 バイト以上を占める文字はバイナリ データとはみなされないため、btoa() に渡されるとエラーが発生します。この問題は「Unicode 問題」として知られています。
バイナリの相互運用性を備えた解決策
MDN が推奨する解決策には、バイナリ文字列表現へのエンコードとバイナリ文字列表現からのデコードが含まれます。これにより、データのバイナリの性質が保持され、Unicode の問題が解消されます。エンコード プロセスには、UTF-8 文字列を Uint16Array および Uint8Array を使用してバイナリ文字列に変換することが含まれます。デコードには、バイナリ文字列を UTF-8 文字列に変換することが含まれます。
ASCII Base64 相互運用性を備えたソリューション
別の解決策は、UTF-16 DOMString を 8 に変換することです。 -bit Uint8Array を使用して文字の整数配列を作成し、btoa() を使用してエンコードします。このメソッドは UTF-8 機能を維持し、UTF-8 をサポートするプラットフォームでデコードできるプレーン テキストの Base64 文字列を生成します。デコードには、atob() と decodeURIComponent() を使用して、base64 文字列を UTF-8 文字列に変換し直すことが含まれます。
非推奨のソリューション
以前に使用されていたソリューションには、escape( ) および unescape() 関数は現在非推奨になっています。この方法は最新のブラウザでも機能しますが、使用はお勧めできません。
さらに、GitHub API を使用する場合、デコード前に Base64 ソースから空白を削除して正しく機能させる必要がある場合があることに注意してください。モバイルサファリ
以上がJavaScript で「atob()」が UTF-8 文字列のデコードに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。