Hitung dari kelompok tiga byte dan padding

Base64 standar RFC 4648 menyatakan tiga byte sebagai empat karakter. Kelompok akhir satu byte memerlukan ==, dua byte =, dan tiga byte tanpa padding. Dengan padding tanpa baris baru tambahan, panjangnya 4 * Math.ceil(n / 3), dengan n jumlah byte input. Nol byte menghasilkan panjang nol.

n = new TextEncoder().encode(input).length
length = 4 * Math.ceil(n / 3)

f     1   Zg==       4
fo    2   Zm8=       4
foo   3   Zm9v       4
foob  4   Zm9vYg==   8

Contoh tetap ini dijalankan dengan fungsi nyata. f, fo dan foo menghasilkan empat karakter meski panjang input berbeda; paddingnya berbeda. foob berisi empat byte dan menghasilkan delapan karakter. Padding menunjukkan format kelompok akhir, bukan karakter yang ditambahkan ke teks asli.

Input 1, 2, 3 dan 4 byte dibandingkan dengan keluaran Base64 4, 4, 4 dan 8 karakter serta padding ==, =, tanpa padding dan ==.
Diagram buatan sendiri dari perhitungan contoh. Angka kiri menghitung byte input; string adalah keluaran nyata. Bukan pengukuran ukuran transfer keseluruhan. Angka kanan menghitung karakter keluaran.

RFC 4648: Base 64 Encoding

Bedakan karakter, byte dan baris baru

Moyoutil memakai TextEncoder untuk mengubah input menjadi byte UTF-8. Contoh 가 memakai tiga byte dan menjadi 6rCA, empat karakter. f diikuti baris baru LF memakai dua byte dan menjadi Zgo=. Spasi dan baris baru dalam sumber adalah data saat encoding. Header HTTP, pembungkus JSON dan awalan URL data tidak termasuk rumus.

base64("가")     // 6rCA
base64("f\n")  // Zgo=

WHATWG Encoding: TextEncoder

Masukkan teks sumber lalu pilih Encode. Untuk decode, masukkan hanya keluaran Base64 standar. Decode menghapus whitespace input; encode mempertahankan whitespace sumber. Base64URL dengan - dan _ serta pemulihan file biner sembarang tidak didukung. /w== bisa dibaca sebagai Base64 tetapi menghasilkan kesalahan karena bukan teks UTF-8. Mengubah input menghapus hasil lama dan menonaktifkan salin; lakukan konversi lagi.

Pertanyaan yang Sering Diajukan

Apakah ukuran selalu bertambah sekitar 33%?

Untuk input besar rasionya mendekati 4/3, tetapi padding sangat memengaruhi input kecil. Satu byte menjadi empat karakter. Hitung byte dan periksa padding untuk panjang tepat.

Apakah layar mengubah input kosong menjadi nol karakter?

Rumus mengembalikan nol untuk nol byte, tetapi layar Moyoutil meminta isi saat input kosong. Batas rumus dan kebijakan input layar berbeda.