Standar unicode memiliki cukup poin kode di dalamnya sehingga Anda memerlukan 4 byte untuk menyimpan semuanya. Itulah yang dilakukan pengkodean UTF-32. Namun pengkodean UTF-8 entah bagaimana meremasnya ke dalam ruang yang jauh lebih kecil dengan menggunakan sesuatu yang disebut "pengkodean lebar-variabel".
Faktanya, ini berhasil mewakili 127 karakter pertama US-ASCII hanya dalam satu byte yang terlihat persis seperti ASCII asli, sehingga Anda dapat menafsirkan banyak teks ascii seolah-olah UTF-8 tanpa melakukan apa pun padanya. Trik rapi. Jadi bagaimana cara kerjanya?
Saya akan bertanya dan menjawab pertanyaan saya sendiri di sini karena saya baru saja membaca sedikit untuk mengetahuinya dan saya pikir ini akan menghemat waktu orang lain. Ditambah mungkin seseorang bisa mengoreksi saya jika saya salah.
sumber
Jawaban:
Setiap byte dimulai dengan beberapa bit yang memberi tahu Anda apakah itu titik kode byte tunggal, titik kode multi-byte, atau kelanjutan dari titik kode multi-byte. Seperti ini:
Titik kode multi-byte masing-masing dimulai dengan beberapa bit yang pada dasarnya mengatakan "hei, Anda juga perlu membaca byte berikutnya (atau dua, atau tiga) untuk mengetahui siapa saya." Mereka:
Akhirnya, semua byte yang mengikuti kode awal tersebut terlihat seperti ini:
Karena Anda dapat mengetahui jenis byte yang Anda lihat dari beberapa bit pertama, bahkan jika ada sesuatu yang rusak di suatu tempat, Anda tidak kehilangan seluruh urutannya.
sumber
next char is continuation
? Jika kita mendapat karakter 3 byte maka akan seperti:,1xxxxxxx 1xxxxxxx 0xxxxxxx
jadi lebih sedikit ruang yang terbuang.RFC3629 - UTF-8, format transformasi ISO 10646 adalah otoritas akhir di sini dan memiliki semua penjelasannya.
Singkatnya, beberapa bit di setiap byte dari urutan 1-ke-4-byte berenkode UTF-8 yang mewakili satu karakter digunakan untuk menunjukkan apakah itu byte tambahan, byte utama, dan jika demikian, berapa banyak byte yang mengikuti. Bit yang tersisa berisi payload.
sumber
Kutipan dari The Absolute Minimum Setiap Pengembang Perangkat Lunak Sepenuhnya, Secara Positif Harus Tahu Tentang Unicode dan Kumpulan Karakter (Tanpa Alasan!)
sumber