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

Susan Sarandon
Lepaskan: 2024-11-02 09:35:30
asal
208 orang telah melayarinya

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!