Apa itu pengodean karakter
Pengodean adalah sebuah kesepakatan: «angka 65 berarti huruf A». Saat kamu menulis teks, program menyimpan angka-angka itu; saat orang lain membukanya, programnya menerjemahkan angka itu kembali menjadi huruf dengan kesepakatan yang sama. Kalau keduanya tidak memakai tabel yang sama, teksnya jadi kacau.
Ada dua gagasan yang perlu dibedakan. Yang pertama adalah kumpulan karakter, yaitu daftar angka mana yang sesuai dengan simbol mana. Yang kedua adalah cara angka-angka itu disimpan dalam byte. Pada ASCII keduanya kebetulan sama; pada Unicode tidak, dan di situlah UTF-8 berperan.
ASCII: 128 karakter 7 bit
ASCII (singkatan dari American Standard Code for Information Interchange) distandarkan pada 1960-an. Ia memakai 7 bit, yaitu 2 pangkat 7 = 128 kode, dari 0 sampai 127. Dari jumlah itu, 33 adalah karakter kontrol (0 sampai 31 dan 127) dan 95 adalah karakter yang dapat dicetak (32 sampai 126, termasuk spasi).
ASCII tidak memuat huruf beraksen, tidak pula simbol euro: ia dirancang untuk bahasa Inggris. Itu menjelaskan mengapa kemudian diperlukan tabel lain.
| Karakter kontrol | Desimal | Heksadesimal | Biner (7 bit) | Fungsinya |
|---|---|---|---|---|
| Null (NUL) | 0 | 00 | 0000000 | Menandai akhir string di beberapa bahasa pemrograman |
| Tab horizontal (TAB) | 9 | 09 | 0001001 | Melompat ke posisi tab berikutnya |
| Baris baru (LF) | 10 | 0A | 0001010 | Turun ke baris berikutnya |
| Carriage return (CR) | 13 | 0D | 0001101 | Kembali ke awal baris |
| Escape (ESC) | 27 | 1B | 0011011 | Memulai urutan kontrol |
| Spasi | 32 | 20 | 0100000 | Karakter pertama yang dapat dicetak |
| Hapus (DEL) | 127 | 7F | 1111111 | Menghapus karakter |
Hubungan yang perlu diingat
Tabelnya tidak disusun sembarangan. Dengan beberapa keteraturan, kamu bisa membaca kode dari ingatan.
- Digit «0» sampai «9» menempati 48 sampai 57 (30 sampai 39 dalam heksadesimal). Nilai sebuah digit adalah kodenya dikurangi 48: «7» adalah 55, dan 55 − 48 = 7.
- Huruf kapital berjalan dari 65 («A») sampai 90 («Z») dan huruf kecil dari 97 («a») sampai 122 («z»).
- Selisih antara huruf kapital dan huruf kecilnya selalu 32: «A» = 65 dan «a» = 97; «C» = 67 dan «c» = 99. Dalam biner hanya satu bit yang berubah: 01000001 untuk «A» dan 01100001 untuk «a».
- Untuk tahu urutan sebuah huruf kapital dalam alfabet, kurangi 64: «C» adalah 67 dan 67 − 64 = 3, huruf ketiga.
- Karena semua huruf kapital (65 sampai 90) berkode lebih kecil daripada huruf kecil (97 sampai 122), urutan alfabet «menurut kode» menempatkan «Zebra» sebelum «apel». Banyak program memerlukan opsi pembanding tersendiri untuk mengurutkan dengan benar.
Akhir baris: LF, CR, dan CRLF
Pindah baris tampak sederhana, tetapi penulisannya berbeda menurut sistem. Unix, Linux, dan macOS memakai satu karakter, LF (10). Windows memakai dua karakter berurutan, CR dan LF (13 dan 10), yang dikenal sebagai CRLF. Teleprinter lama membutuhkan dua perintah berbeda: mengembalikan kereta ke awal dan menggeser kertas satu baris.
Perbedaan itu menjadi penyebab berkas yang tampil dalam satu baris di editor sederhana, atau dengan simbol aneh di ujung tiap baris. Kalau kamu ingin tahu kode masing-masing, ketik LF atau CR di pencarian Tabel ASCII.
«ASCII yang diperluas» bukan standar
Karena satu byte punya 8 bit dan ASCII hanya memakai 7, tersisa 128 kode kosong (128 sampai 255) dan tiap produsen serta wilayah mengisinya dengan cara masing-masing. Itu dikenal sebagai «ASCII yang diperluas», tetapi tidak ada satu tabel tunggal: ada banyak, disebut code page. Dua yang paling dikenal adalah Latin-1 (ISO-8859-1), di mana é adalah kode 233, dan Windows-1252, yang mirip tetapi berbeda pada kode 128 sampai 159 (di situ ada, misalnya, euro).
Masalahnya, kode 233 berarti «é» di satu tabel dan hal lain di tabel lain. Teks yang ditulis dengan satu tabel dan dibaca dengan tabel lain menampilkan sampah. Unicode lahir untuk mengakhiri kekacauan itu.
Unicode dan UTF-8
Unicode memberi nomor unik, yang disebut code point, pada setiap karakter dari hampir semua sistem tulisan di dunia, ditambah simbol dan emoji. Kini jumlahnya lebih dari 150.000 karakter. Ditulis dengan awalan U+ dan dalam heksadesimal: «A» adalah U+0041, «é» adalah U+00E9, euro adalah U+20AC, dan emoji wajah tersenyum adalah U+1F600. 128 code point pertama persis sama dengan ASCII.
UTF-8 adalah cara yang paling banyak dipakai untuk menyimpan angka-angka itu dalam byte, dan memakai 1 sampai 4 byte tergantung karakternya. Ke-128 karakter ASCII menempati satu byte yang sama seperti dulu, jadi teks ASCII juga merupakan teks UTF-8 yang valid. Sisanya menempati lebih banyak byte.
| Karakter | Code point | Byte dalam UTF-8 | Byte (heksadesimal) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Mengapa muncul «Ã©» sebagai ganti «é»
Ini kesalahan yang paling umum dan penjelasannya pasti. Huruf é dalam UTF-8 adalah dua byte: C3 dan A9. Kalau sebuah program mengira teksnya berpengodean Latin-1, ia membaca tiap byte sebagai satu karakter: C3 adalah «Ã» dan A9 adalah «©». Hasilnya: «Ã©». Hal yang sama terjadi pada «ñ», yang tampil sebagai «Ã±», dan pada «café», yang muncul sebagai «café».
Solusinya hampir selalu memberi tahu program untuk membuka berkas sebagai UTF-8 (di editor teks atau di pengaturan impor spreadsheet). Ketika terjadi sebaliknya, teks Latin-1 dibaca sebagai UTF-8, biasanya muncul belah ketupat dengan tanda tanya, karena byte-byte tunggal itu tidak membentuk urutan UTF-8 yang valid.
Cara memakai Tabel ASCII dan konverternya
Alat «Tabel ASCII» menampilkan 128 karakter dengan kodenya dalam desimal, heksadesimal, oktal, dan biner, serta nama karakter kontrol.
- Ketik di pencarian sebuah karakter, kode, atau nama karakter kontrol (misalnya A, 65, 41, atau LF) untuk menemukan barisnya.
- Pakai tombol saring (Kontrol, Angka, Huruf besar, Huruf kecil, Tanda) untuk melihat satu kelompok saja.
- Untuk mengubah, ketik teks di «Teks» dan pilih formatnya (desimal, heksadesimal, oktal, atau biner): kodenya muncul di bawah. «Halo» menghasilkan 72 97 108 111 dalam desimal dan 48 61 6C 6F dalam heksadesimal.
- Kamu juga bisa sebaliknya: tempelkan kode yang dipisahkan spasi atau koma di «Kode» dan teksnya tersusun. Dalam heksadesimal, awalan seperti 0x41 diterima.
Kalau teks memuat karakter non-ASCII, seperti é, alat akan memberi tahu dan menampilkan kode Unicode-nya. Untuk melihat byte sebenarnya dalam UTF-8, pakai «Teks ke biner»: é menghasilkan 11000011 10101001, dua byte 8 bit. Batasannya: tabel hanya menampilkan ASCII standar, bukan yang diperluas, dan semuanya dihitung di browser kamu tanpa mengirim teks ke server mana pun.
Pertanyaan yang sering diajukan
Berapa karakter yang dimiliki ASCII?
128, dengan kode 0 sampai 127 dan masing-masing 7 bit. Di antaranya, 33 adalah karakter kontrol dan 95 dapat dicetak, termasuk spasi.
Apa kode ASCII huruf A dan a?
«A» adalah 65 (41 dalam heksadesimal, 01000001 dalam biner) dan «a» adalah 97 (61 dalam heksadesimal, 01100001 dalam biner). Selisihnya selalu 32.
Apa perbedaan ASCII dan Unicode?
ASCII punya 128 karakter yang dirancang untuk bahasa Inggris. Unicode punya lebih dari 150.000, dari hampir semua bahasa dan emoji, dan 128 yang pertama sama dengan ASCII.
Apa itu UTF-8?
Cara yang paling banyak dipakai untuk menyimpan teks Unicode dalam byte. Ia memakai 1 sampai 4 byte per karakter: karakter ASCII memakai satu, huruf é memakai dua, dan emoji empat.
Mengapa teksku menampilkan «Ã©» atau «Ã±»?
Karena teks yang disimpan dalam UTF-8 sedang dibaca sebagai Latin-1. Buka berkasnya dengan menentukan pengodean UTF-8 dan masalahnya selesai.