UTF-8 (Universal Character Set (UCS) Transformation Format — 8-bit[1]) adalah sebuah pengkodean karakter dengan lebar variabel tertentu (variable-width encoding) yang mewakili setiap karakter komputer (character) dalam himpunan karakter Unicode. Didesain untuk backward compatibility dengan ASCII dan untuk menghindari komplikasi endianness dan byte order mark dalam UTF-16 dan UTF-32.
UTF-8 telah menjadi metode pengkodean karakter (character encoding) yang dominan untuk World Wide Web, meliputi lebih dari setengah jumlah seluruh halaman Web.[2][3][4] Internet Engineering Task Force (IETF) mengharuskan semua protokol Internet untuk mengidentifikasi encoding yang dipakai untuk data karakter, dan pengkodean karakter yang didukung (supported character encoding) untuk menyertakan UTF-8.[5] Internet Mail Consortium (IMC) merekomendasi seluruh program e-mail dapat menayangkan dan membuat e-mail menggunakan UTF-8.[6] UTF-8 juga terus meningkat penggunaannya sebagai default character encoding dalam sistem operasi, bahasa pemrograman, API, dan aplikasi perangkat lunak.
Deskripsi
Desain UTF-8 dapat dilihat di tabel berikut yaitu skema yang asalnya diusulkan oleh Dave Prosser dan selanjutnya dimodifikasi oleh Ken Thompson (x
diganti dengan bit dari code point):
Bit code point |
Code point pertama |
Code point terakhir |
Byte dalam sequence |
Byte 1 |
Byte 2 |
Byte 3 |
Byte 4 |
Byte 5 |
Byte 6
|
7
|
U+0000 |
U+007F
|
1
|
0xxxxxxx
|
11
|
U+0080 |
U+07FF
|
2
|
110xxxxx |
10xxxxxx
|
16
|
U+0800 |
U+FFFF
|
3
|
1110xxxx |
10xxxxxx |
10xxxxxx
|
21
|
U+10000 |
U+1FFFFF
|
4
|
11110xxx |
10xxxxxx |
10xxxxxx |
10xxxxxx
|
26
|
U+200000 |
U+3FFFFFF
|
5
|
111110xx |
10xxxxxx |
10xxxxxx |
10xxxxxx |
10xxxxxx
|
31
|
U+4000000 |
U+7FFFFFFF
|
6
|
1111110x |
10xxxxxx |
10xxxxxx |
10xxxxxx |
10xxxxxx |
10xxxxxx
|
Contoh
Mari melihat bagaimana membuat pengkodean tanda mata uang Euro, €.
- 'Unicode code point untuk "€" adalah U+20AC.
- Menurut tabel skema di atas, dibutuhkan 3 bita (byte) untuk pengkodean, karena terletak di antara U+0800 dan U+FFFF.
- Kode heksadesimal
20AC
adalah sama dengan kode biner (binary) 0010000010101100
. Dua angka nol di depan ditambahkan karena, seperti dalam tabel, suatu pengkodean tiga-bita (three-byte encoding) membutuhkan tepat enam belas bit dari the code point.
- Karena berupa pengkodean tiga-bita, bita pendahulu dimulai dengan tiga angka "1", kemudian satu angkat "0" (
1110
...)
- Bit sisanya dari bita ini diambil dari code point (
11100010
), menyisakan ...000010101100
.
- Setiap kelanjutan bita dimulai dengan
10
dan dibutuhkan enam bit code point (maka 10000010
, lalu 10101100
).
Tiga bita11100010
10000010
10101100
dapat ditulis lebih singkat dalam heksadesimal, sebagai E2 82 AC
.
Tabel berikut adalah ikhtisar pengubahan ini, juga yang lain dengan panjang berbeda dalam UTF-8. Warna-warna mengindikasikan bagaiman bit dari code point didistribusikan di antara byte-byte UTF-8. Bit tambahan yang ditambahkan oleh proses encoding UTF-8 diberi warna hitam.
Karakter
|
code point biner
|
UTF-8 biner
|
UTF-8 heksadesimal
|
$ |
U+0024
|
0100100
|
00100100
|
24
|
¢ |
U+00A2
|
000 10100010
|
11000010 10100010
|
C2 A2
|
€ |
U+20AC
|
00100000 10101100
|
11100010 10000010 10101100
|
E2 82 AC
|
𤭢 |
U+24B62
|
00010 01001011 01100010
|
11110000 10100100 10101101 10100010
|
F0 A4 AD A2
|
Lihat pula
Referensi
Pranala luar
Ada beberapa definisi UTF-8 dalam berbagai dokumen standar:
- RFC 3629 / STD 63 (2003), yang menetapkan UTF-8 sebagai elemen protokol Internet standar
- The Unicode Standard, Version 6.0, §3.9 D92, §3.10 D95 (2011)
- ISO/IEC 10646:2003 Annex D (2003)
Dokumen-dokumen tersebut menggantikan definisi-definisi yang telah usang dalam karya-karya berikut:
- ISO/IEC 10646-1:1993 Amendment 2 / Annex R (1996)
- The Unicode Standard, Version 5.0, §3.9 D92, §3.10 D95 (2007)
- The Unicode Standard, Version 4.0, §3.9–§3.10 (2003)
- The Unicode Standard, Version 2.0, Appendix A (1996)
- RFC 2044 (1996)
- RFC 2279 (1998)
- The Unicode Standard, Version 3.0, §2.3 (2000) plus Corrigendum #1: UTF-8 Shortest Form (2000)
- Unicode Standard Annex #27: Unicode 3.1 (2001)
Semua sama dalam mekanika umum, dengan perbedaan pokok pada topik-topik misalnya mengizinkan range nilai code point dan safe handling untuk invalid input.
Templat:Unicode navigation
Templat:Character encoding