34 poin oleh GN⁺ 2025-09-13 | Belum ada komentar. | Bagikan ke WhatsApp
  • UTF-8 adalah metode encoding dengan panjang variabel yang mampu merepresentasikan jutaan karakter sambil tetap mempertahankan kompatibilitas mundur dengan ASCII
  • Area 7-bit yang sama dengan ASCII (U+0000~U+007F) menggunakan 1 byte apa adanya, sehingga file ASCII otomatis menjadi file UTF-8 yang valid
  • Karakter lainnya direpresentasikan sebagai urutan 2~4 byte, dengan pola bit pada byte pertama menentukan panjangnya dan byte-byte berikutnya diawali 10 untuk menandakan bahwa itu adalah byte lanjutan
  • Berkat desain ini, UTF-8 dapat menangani himpunan karakter universal sekaligus tetap sepenuhnya kompatibel dengan sistem ASCII yang sudah ada, sehingga menjadi encoding karakter yang paling luas digunakan
  • Encoding Unicode lain seperti UTF-16 dan UTF-32 tidak menyediakan kompatibilitas ASCII seperti ini

Keunggulan desain UTF-8

  • Saat pertama kali mengenal encoding UTF-8, saya sangat terkesan oleh bagaimana ia dapat mencakup jutaan karakter dari berbagai bahasa dan simbol dalam satu sistem, sambil tetap memiliki struktur yang kompatibel dengan ASCII lama
  • Pada dasarnya UTF-8 memanfaatkan hingga 32 bit, tetapi ASCII hanya menggunakan 7 bit
  • Prinsip desain UTF-8 adalah sebagai berikut
    • Semua file yang diencoding dengan ASCII adalah file UTF-8 yang valid
    • Semua file UTF-8 yang hanya berisi karakter ASCII adalah file ASCII yang valid
  • Gagasan untuk menggabungkan sistem lama yang terbatas pada 128 karakter dengan sistem yang mencakup jutaan karakter benar-benar sangat inovatif

Konsep dasar UTF-8

  • UTF-8 adalah encoding karakter dengan panjang variabel (variable-width encoding) yang dirancang untuk merepresentasikan semua karakter dalam himpunan karakter Unicode
  • Setiap karakter diencoding dalam 1~4 byte
  • 128 karakter pertama (U+0000~U+007F) disimpan sebagai satu byte, sehingga kompatibilitas mundur dengan ASCII terjaga
  • Karakter lainnya diencoding dalam dua, tiga, atau empat byte
  • Bit awalan pada byte pertama menentukan jumlah total byte yang diperlukan untuk encoding tersebut
Pola 1 byte Jumlah byte Pola seluruh urutan byte
0xxxxxxx 1 0xxxxxxx (ASCII umum)
110xxxxx 2 110xxxxx 10xxxxxx
1110xxxx 3 1110xxxx 10xxxxxx 10xxxxxx
11110xxx 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
  • Byte ke-2, ke-3, dan ke-4 dalam urutan multibyte selalu dimulai dengan 10, yang menandai dengan jelas bahwa itu adalah byte lanjutan
  • Sisa bit dari byte utama dan byte lanjutan digabungkan untuk membentuk satu code point
    • Code point adalah pengenal unik untuk karakter Unicode, ditulis dengan awalan "U+" dan angka heksadesimal
    • Contoh: code point untuk "A" adalah U+0041
  • Alur menafsirkan karakter dari byte encoding UTF-8 adalah sebagai berikut
    • 1. Baca satu byte; jika diawali 0, anggap itu sebagai karakter satu byte (ASCII), gunakan 7 bit sisanya untuk menampilkan karakter, lalu lanjut ke byte berikutnya
    • 2. Jika tidak diawali 0, maka
      • jika 110, berarti karakter 2 byte dan satu byte berikutnya perlu dibaca
      • jika 1110, berarti karakter 3 byte dan dua byte berikutnya perlu dibaca
      • jika 11110, berarti karakter 4 byte dan tiga byte berikutnya perlu dibaca
    • 3. Dari byte-byte yang telah ditentukan, gabungkan bit-bit selain bit awalan untuk digunakan sebagai nilai biner code point
    • 4. Cari code point tersebut dalam himpunan karakter Unicode lalu tampilkan di layar
    • 5. Ulangi untuk byte berikutnya

Contoh: karakter Hindi "अ"

  • Representasi UTF-8: 11100000 10100100 10000101 (3 byte)
  • Byte pertama (11100000) → menunjukkan bahwa ini adalah karakter 3 byte
  • Gabungan bit valid dari tiga byte → 00001001 00000101 = heksadesimal 0x0905
  • Code point U+0905 berarti karakter Devanagari "अ"

Contoh file

  • 1. Hey👋 Buddy

    • Total terdiri dari 13 byte
      • Karakter ASCII (H, e, y, B, u, d, d, y, spasi) → masing-masing 1 byte
      • 👋 (U+1F44B) → 4 byte 11110000 10011111 10010001 10001011
    • File ini adalah file UTF-8 yang valid, tetapi karena mengandung karakter non-ASCII (emoji), file ini tidak kompatibel sebagai ASCII
  • 2. Hey Buddy

    • Total 9 byte, semuanya berada dalam rentang ASCII
    • Karena itu, file ini sekaligus merupakan file ASCII yang valid dan file UTF-8 yang valid

Perbandingan dengan encoding lain

  • Ada beberapa encoding yang menyediakan kompatibilitas dengan ASCII, tetapi tidak digunakan seluas UTF-8
  • GB18030 (standar Tiongkok) dan lainnya juga menyediakan kompatibilitas ASCII, tetapi tidak banyak digunakan
  • Keluarga ISO/IEC 8859 merupakan ekstensi satu byte (maksimal 256 karakter), sehingga memiliki keterbatasan
  • UTF-16/UTF-32 tidak memiliki kompatibilitas ASCII
    • 'A' (U+0041): dalam UTF-16 adalah 00 41, dalam UTF-32 adalah 00 00 00 41

Bonus: Playground UTF-8

Belum ada komentar.

Belum ada komentar.