Byte dan karakter adalah tahap terpisah

Base64 RFC 4648 menyatakan byte dengan karakter. Ini tidak menentukan teks atau gambar maupun pengodean teksnya. Uji minimal ini memisahkan tahap; bukan berkas gambar contoh.

w6k= menghasilkan C3 A9: é dalam UTF-8. /w== menghasilkan FF dan gagal pada UTF-8. ww== hanya menghasilkan C3 tanpa byte berikutnya yang diperlukan. Ketiganya berhasil memulihkan byte. @@@ ditolak pada tahap pertama.

Tiga input Base64, byte heksadesimal dan hasil UTF-8
Diagram asli dari uji yang direproduksi. Kiri Base64, tengah byte, kanan UTF-8. Hanya é keluaran teks; TypeError nama pengecualian kode uji.

RFC 4648: Base64

Penggantian dan dekode ketat berbeda

WHATWG menetapkan replacement sebagai mode awal TextDecoder; fatal: true melempar pengecualian saat gagal. Uji UTF-8 awal kami dengan FF menghasilkan U+FFFD. Moyoutil memakai fatal: true dan melaporkan kesalahan. Karakter pengganti tidak memulihkan teks asli yang tepat.

const bytes = Uint8Array.from(atob('/w=='), c => c.charCodeAt(0));
// bytes: [255] = FF
new TextDecoder('utf-8').decode(bytes); // U+FFFD
new TextDecoder('utf-8', {fatal: true}).decode(bytes); // TypeError

Pastikan sumber berupa teks UTF-8. Gambar dan berkas terkompresi di luar cakupan alat teks ini. Untuk pengodean lain, periksa sistem sumber dan gunakan alat yang mendukungnya. Base64 tidak menentukan pengodean. Moyoutil tidak menebaknya dan tidak mendukung - serta _ Base64URL.

WHATWG: TextDecoder

Pertanyaan yang Sering Diajukan

Apakah mengubah = memperbaiki kesalahan UTF-8?

Jika byte sudah dipulihkan, mengubah = sembarangan bukan solusi. Periksa pengodean asal atau data terpotong. /w== memulihkan FF, tetapi bukan teks UTF-8 valid.