Rumah  >  Artikel  >  hujung hadapan web  >  Mengapakah `atob` Javascript gagal menyahkod rentetan base64 UTF-8 dengan betul?

Mengapakah `atob` Javascript gagal menyahkod rentetan base64 UTF-8 dengan betul?

DDD
DDDasal
2024-11-01 23:10:29379semak imbas

Why does Javascript's `atob` fail to decode UTF-8 base64 strings properly?

Menggunakan atob Javascript untuk menyahkod base64 tidak menyahkod rentetan utf-8 dengan betul

Atob Javascript boleh menyahkod rentetan base64 yang telah dikodkan dengan betul dengan aksara ASCII, sebagai contoh, window.atob('YQ==') akan mengembalikan aksara ASCII 'a'. Walau bagaimanapun, ia tidak akan menyahkod rentetan base64 dengan betul yang telah dikodkan dengan aksara Unicode UTF-8, contohnya, window.atob('4pyTIMOgIGxhIG1vZGU=') akan mengembalikan '⢠à la mode' dan bukannya '✓ à la mode' .

Untuk menyahkod rentetan base64 yang telah dikodkan dengan UTF-8 dengan betul, kita perlu menggunakan fungsi escape dan unescape. Dalam kes ini, window.atob(unescape(encodeURIComponent('✓ à la mode'))) akan mengembalikan '4pyTIMOgIGxhIG1vZGU=' dan window.atob('4pyTIMOgIGxhIG1vZGU=') akan mengembalikan '✓ à la mode'.

Pilihan lain untuk mengendalikan aliran masuk yang dikodkan base64 supaya ia dinyahkodkan sebagai utf-8 ialah menggunakan kelas TextDecoder. Kelas ini menyediakan cara untuk menyahkod rentetan berkod base64 ke rentetan UTF-8. Berikut ialah contoh cara menggunakannya:

<code class="javascript">const text = '4pyTIMOgIGxhIG1vZGU=';
const decoder = new TextDecoder('utf-8');
const decodedText = decoder.decode(Uint8Array.from(atob(text)));
console.log(decodedText); // '✓ à la mode'</code>

Atas ialah kandungan terperinci Mengapakah `atob` Javascript gagal menyahkod rentetan base64 UTF-8 dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn