RUNWEBTOOLS
Bahasa Indonesia
Format data & pengodean

Pengodean karakter: Unicode dan UTF-8 dijelaskan

Diperbarui 2026-07-06

Anda pernah melihatnya: nama yang seharusnya terbaca José muncul sebagai José, atau emoji berubah jadi kotak tanda tanya. Kekacauan itu punya nama — mojibake — dan hampir selalu ketidakcocokan pengodean karakter. Panduan ini menjelaskan apa itu karakter, Unicode, dan UTF-8 sebenarnya, agar bug semacam itu tak lagi misterius.

Komputer menyimpan angka, bukan huruf

Pada level terendah, komputer hanya menyimpan angka (byte). Untuk menyimpan teks, kita perlu tabel yang disepakati yang memetakan tiap karakter ke sebuah angka, dan sebaliknya. Tabel itu adalah pengodean karakter. Jika satu program menulis teks dengan satu tabel dan program lain membacanya dengan tabel berbeda, angka-angka ditafsirkan sebagai karakter yang salah — dan Anda mendapat mojibake.

ASCII: awal yang kecil

Pengodean pertama yang tersebar luas, ASCII, menetapkan angka untuk 128 karakter: alfabet Inggris, angka, tanda baca, dan beberapa kode kontrol. Cukup untuk bahasa Inggris tetapi tak ada ruang untuk é, ü, ß, , 😀, atau puluhan ribu karakter yang dipakai bahasa-bahasa dunia. Selama puluhan tahun setiap orang membuat ekstensi sendiri yang tak kompatibel, dan itulah persis mengapa teks rusak saat berpindah antar-sistem.

Unicode: satu angka untuk setiap karakter

Unicode adalah solusi universal: satu standar tunggal yang menetapkan angka unik — disebut titik kode (code point) — untuk setiap karakter di setiap sistem tulisan, ditambah simbol dan emoji. Titik kode ditulis sebagai U+ diikuti angka heksadesimal:

A   →  U+0041
é   →  U+00E9
你  →  U+4F60
😀  →  U+1F600

Yang krusial, Unicode mendefinisikan angka tetapi bukan cara menyimpannya sebagai byte. Itu keputusan terpisah — dan di situlah UTF-8 masuk.

UTF-8: bagaimana Unicode menjadi byte

UTF-8 adalah cara mengodekan titik kode Unicode menjadi byte, dan itulah yang dipakai web secara luar biasa dominan. Desain cerdasnya adalah bahwa ia berpanjang variabel:

  • 128 karakter ASCII masing-masing memakan 1 byte — jadi UTF-8 kompatibel mundur dengan ASCII.
  • Sebagian besar karakter Latin beraksen serta Yunani/Kiril memakan 2 byte.
  • Sebagian besar tulisan lain, termasuk Tionghoa, Jepang, dan Korea, memakan 3 byte.
  • Emoji dan karakter yang lebih langka memakan 4 byte.

Itulah mengapa string "100 karakter" tak selalu 100 byte: satu karakter bisa beberapa byte. Ini juga menjelaskan bug klasik José — itu byte UTF-8 untuk é yang keliru dibaca satu byte demi satu byte sebagai pengodean Barat lama.

Karakter, titik kode, dan byte

Tiga konsep yang terkait tetapi berbeda terus membuat orang tersandung:

  • Karakter (Character) — yang dilihat manusia (huruf é).
  • Titik kode (Code point) — angka Unicode untuknya (U+00E9).
  • Byte — bagaimana ia disimpan (dalam UTF-8, dua byte 0xC3 0xA9).

Melihat titik kode tertulis sering kali cara tercepat mendiagnosis masalah teks — misalnya, sebuah "spasi" yang ternyata spasi tanpa pemutus (U+00A0). Konverter Unicode kami menampilkan titik kode di balik teks apa pun dan mengonversi antara karakter dan urutan escape.

Cara menghindari mojibake

  • Pakai UTF-8 di mana-mana. Simpan berkas sebagai UTF-8 dan deklarasikan — pada halaman web, <meta charset="utf-8">; pada HTTP, charset Content-Type; pada basis data, collation UTF-8.
  • Jaga konsisten dari ujung ke ujung. Kebanyakan kerusakan terjadi di batas tempat satu sisi mengasumsikan pengodean berbeda.
  • Lakukan escape untuk konteks yang benar. Untuk menaruh karakter khusus dengan aman ke HTML, pakai entitas HTML; untuk menaruhnya ke URL, pakai pengodean URL.

Versi singkatnya: Unicode memberi setiap karakter sebuah angka, UTF-8 mengubah angka itu menjadi byte, dan jika semua sepakat memakai UTF-8, teks berhenti rusak.

Lainnya tentang Format data & pengodean

Lihat semua panduan Format data & pengodean →

Alat yang disebut dalam panduan ini