Apa Itu Encoding Unicode? Code Points, UTF-8, dan UTF-16 Dijelaskan

16 Jun 2026 867 words

Apa Itu Encoding Unicode?

Unicode adalah standar encoding karakter universal yang memberikan nomor unik — yang disebut code point — untuk setiap karakter yang digunakan dalam bahasa manusia. Sebelum Unicode, ada puluhan sistem encoding yang tidak kompatibel. Dokumen yang ditulis dalam bahasa Rusia di satu sistem tidak dapat dibaca di sistem lain. Unicode mengatasi ini dengan menyediakan set karakter tunggal yang terpadu yang mencakup lebih dari 150 aksara dan 140.000 karakter.

Unicode sendiri bukanlah sebuah encoding. Ini adalah repertoire karakter. Lapisan encoding — bagaimana code points disimpan sebagai byte — ditangani oleh bentuk encoding seperti UTF-8, UTF-16, dan UTF-32. Memahami perbedaan antara code point dan representasi byte-nya adalah kunci untuk menghindari bug encoding.

Code Points

Setiap karakter Unicode memiliki code point yang ditulis sebagai U+ diikuti dengan angka heksadesimal. Huruf A adalah U+0041, tanda euro adalah U+20AC, dan emoji 😀 adalah U+1F600.

Code points diorganisasikan ke dalam 17 bidang (plane), masing-masing berisi 65.536 karakter. Bidang pertama (Bidang 0) adalah Basic Multilingual Plane (BMP), yang berisi karakter paling umum termasuk Latin, Yunani, Sirilik, CJK, dan banyak lainnya. Bidang 1 hingga 16 berisi karakter tambahan seperti emoji, aksara sejarah, dan karakter CJK langka.

Bidang Rentang Nama
0 U+0000 hingga U+FFFF Basic Multilingual Plane (BMP)
1 U+10000 hingga U+1FFFF Supplementary Multilingual Plane (SMP)
2 U+20000 hingga U+2FFFF Supplementary Ideographic Plane (SIP)
3-13 U+30000 hingga U+DFFFF Belum ditetapkan
14 U+E0000 hingga U+EFFFF Supplementary Special-purpose Plane (SSP)
15-16 U+F0000 hingga U+10FFFF Private Use Planes

UTF-8, UTF-16, UTF-32

Ketiga bentuk encoding ini berbeda dalam cara mereka memetakan code points ke byte.

UTF-8

UTF-8 adalah encoding yang dominan di web. Ini menggunakan 1 hingga 4 byte per karakter dan kompatibel mundur dengan ASCII. Karakter dalam rentang ASCII (U+0000 hingga U+007F) menggunakan satu byte. Aksara Eropa menggunakan dua byte. Karakter CJK dan emoji menggunakan tiga atau empat byte.

Rentang Code Point Byte 1 Byte 2 Byte 3 Byte 4
U+0000 - U+007F 0xxxxxxx
U+0080 - U+07FF 110xxxxx 10xxxxxx
U+0800 - U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
U+10000 - U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Kelebihan UTF-8:

  • Teks ASCII adalah UTF-8 yang valid (tidak perlu konversi)
  • Self-synchronising: Anda selalu dapat menemukan batas karakter
  • Tidak ada masalah urutan byte (little-endian / big-endian)
  • Paling hemat ruang untuk teks aksara Latin

UTF-16

UTF-16 menggunakan 2 byte (satu unit kode) untuk karakter BMP dan 4 byte (dua unit kode, disebut pasangan pengganti) untuk karakter tambahan. Windows, Java, dan JavaScript menggunakan UTF-16 secara internal.

UTF-16 memiliki masalah urutan byte. File UTF-16 harus menentukan apakah itu little-endian (UTF-16LE) atau big-endian (UTF-16BE), biasanya menggunakan BOM (Byte Order Mark) di awal.

UTF-32

UTF-32 menggunakan tepat 4 byte untuk setiap code point. Ini sederhana tetapi boros. File ASCII murni menjadi empat kali lebih besar. UTF-32 jarang digunakan dalam praktik.

Perbandingan

Fitur UTF-8 UTF-16 UTF-32
Byte per karakter 1-4 2 atau 4 4
Kompatibilitas ASCII Ya Tidak Tidak
Penggunaan web ~98% ~2% <0,01%
BOM diperlukan Tidak Ya Ya
Umum di Web, Linux, JSON Windows, Java, JS Pemrosesan internal

Bug Encoding

Bug encoding yang paling umum adalah memperlakukan byte sebagai karakter. Ketika Anda mengambil string UTF-8 dan menafsirkannya sebagai Latin-1 (ISO 8859-1), karakter beraksen muncul sebagai simbol yang kacau. Ini terjadi ketika encoding tidak dideklarasikan atau ketika alat mengasumsikan encoding yang salah.

Masalah umum lainnya adalah menghitung byte alih-alih karakter. Dalam UTF-8, string "café" adalah 4 karakter tetapi 5 byte karena é menggunakan dua byte. Fungsi seperti strlen di PHP menghitung byte secara default, sementara mb_strlen menghitung karakter.

Contoh Pemrograman

// PHP - selalu gunakan fungsi mb_* untuk UTF-8
$text = 'café ☕';
echo strlen($text);      // 8 byte (salah)
echo mb_strlen($text, 'UTF-8');  // 6 karakter

// Encode/decode code points Unicode
echo mb_convert_encoding($text, 'UTF-16', 'UTF-8');
# Python 3 - string adalah Unicode secara default
text = 'café ☕'
print(len(text))         # 6 karakter
bytes_utf8 = text.encode('utf-8')
bytes_utf16 = text.encode('utf-16')
print(bytes_utf8)        # b'caf\xc3\xa9 \xe2\x98\x95'
// JavaScript - string adalah UTF-16 secara internal
let text = 'café ☕';
console.log(text.length);     // 6 (tetapi emoji mungkin dihitung sebagai 2)

// Encode sebagai byte UTF-8
let encoder = new TextEncoder();
let bytes = encoder.encode(text);
console.log(bytes);  // Uint8Array(8)

Alat Online

Alat Unicode Encoder & Decoder di Help2Code mengonversi teks ke code points Unicode dan antara representasi UTF-8, UTF-16, dan UTF-32. Ini berguna untuk men-debug masalah encoding dan mempelajari cara kerja Unicode.

Kesimpulan

Encoding Unicode adalah pengetahuan penting bagi setiap pengembang yang bekerja dengan teks internasional. UTF-8 adalah standar untuk web dan harus menjadi default Anda. Memahami perbedaan antara code points dan representasi byte akan membantu Anda menghindari bug encoding teks yang paling umum. Gunakan Unicode Encoder & Decoder untuk bereksperimen dengan encoding dan men-debug masalah encoding.


About this article

Pelajari apa itu encoding Unicode, cara kerja code points, dan perbedaan antara UTF-8, UTF-16, dan UTF-32.


Related Articles


Related Tools

Help2Code Logo
Menu