Rumah  >  Artikel  >  hujung hadapan web  >  Mengapakah `atob()` Gagal Menyahkod Rentetan UTF-8 dalam JavaScript?

Mengapakah `atob()` Gagal Menyahkod Rentetan UTF-8 dalam JavaScript?

Susan Sarandon
Susan Sarandonasal
2024-11-02 09:35:30209semak imbas

Why Does `atob()` Fail to Decode UTF-8 Strings in JavaScript?

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

Fungsi window.atob() dalam JavaScript tidak t menyahkod rentetan UTF-8 dengan betul apabila berurusan dengan aksara yang menduduki lebih daripada satu bait, mengakibatkan Sebaliknya aksara berkod ASCII.

Masalah Unikod

Rentetan JavaScript dikodkan dalam unit 16-bit dan btoa() menjangkakan data binari sebagai input. Aksara yang menduduki lebih daripada satu bait, seperti aksara khas atau aksara asing, tidak dianggap sebagai data binari dan akan mencetuskan ralat apabila dihantar ke btoa(). Isu ini dikenali sebagai "Masalah Unikod."

Penyelesaian dengan Kebolehoperasian Binari

Penyelesaian yang disyorkan oleh MDN melibatkan pengekodan dan penyahkodan daripada perwakilan rentetan binari. Ini mengekalkan sifat binari data dan menghapuskan Masalah Unicode. Proses pengekodan melibatkan penukaran rentetan UTF-8 kepada rentetan binari dengan Uint16Array dan Uint8Array. Penyahkodan melibatkan penukaran rentetan binari kembali kepada rentetan UTF-8.

Penyelesaian dengan Saling kendali ASCII Base64

Penyelesaian lain ialah menukar UTF-16 DOMString kepada 8 -bit integer tatasusunan aksara menggunakan Uint8Array dan kemudian mengekodnya menggunakan btoa(). Kaedah ini mengekalkan fungsi UTF-8 dan menghasilkan rentetan teks biasa base64 yang boleh dinyahkod pada platform yang menyokong UTF-8. Penyahkodan melibatkan penukaran rentetan base64 kembali kepada rentetan UTF-8 menggunakan atob() dan decodeURIComponent().

Penyelesaian Dihentikan

Penyelesaian yang digunakan sebelum ini melibatkan penggunaan escape( ) dan fungsi unescape(), yang kini telah ditamatkan. Walaupun kaedah ini masih berfungsi dalam penyemak imbas moden, kaedah ini tidak disyorkan untuk digunakan.

Selain itu, perlu diperhatikan bahawa apabila bekerja dengan API GitHub, anda mungkin perlu menanggalkan ruang putih daripada sumber base64 sebelum menyahkod untuk berfungsi dengan betul Safari Mudah Alih.

Atas ialah kandungan terperinci Mengapakah `atob()` Gagal Menyahkod Rentetan UTF-8 dalam JavaScript?. 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