UTF-8 (UCS/Format Transformasi Unicode (UTF) 8-bit) ialahpengekodan aksarapanjang boleh ubah untukUnicode, yang mampu mewakili mana-mana aksara dalam piawaian Unicode, tetapiserasi denganASCII. Atas sebab-sebab inilah, UTF-8 semakin diutamakan untuk pengekodane-mel,laman web,[1][2] dan apa-apa sahaja yangmenyimpan ataumenstrimkan aksaranya.
UTF-8 mengekodkan setiap aksara (titik kod) dalam 1 hingga 4oktet (bait 8-bit), yang mana pengekodan satu oktet hanya digunakan untuk 128 aksara US-ASCII.
Pasukan Petugas Kejuruteraan Internt (Internet Engineering Task Force, IETF) mewajibkan semuaprotokolInternet mengenal pasti pengekodan yang digunakan untuk data aksara, lebih-lebih lagi pengekodan aksara yang disokong mestilah termasuk sekali UTF-8.[3]Konsortium Mel Internet (Internet Mail Consortium, IMC) mencadangkan agar semua program e-mel mampu memaparkan dan menghasilkan mel dengan UTF-8.[4]
Pengekodan UTF-8 adalah berlebar boleh ubah, iaitu dari 1 hingga 4 bait. Setiap bait ada 0–4 bit satu diikuti oleh satu bit sifar untuk menandakan jenisnya. N bit satu menandakan bait pertama dalam urutan N-bait, kecuali tiada bit 1 menandakan urutan satu bait manakala satu bit 1 menandakan bait sambungan dalam urutan berbilang bait (ini dilakukan demi keserasian ASCII). Nilai skalatitik kod Unicode ialah penjeraitan bit-bit bukan kawalan. Dalam jadual berikut, angka sifar dan satu mewakili bit kawalan,x
mewakili 8 bit terendah dalam nilai Unicode,y
mewakili 8 bit di atasx
, danz
pula 8 bit di atasy
.
Unicode | Bait1 | Bait2 | Bait3 | Bait4 | Contoh |
---|
U+0000–U+007F | 0xxxxxxx | | | | '$'U+0024 →00100100 →0x24 |
U+0080–U+07FF | 110yyyxx | 10xxxxxx | | | '¢'U+00A2 →11000010,10100010 →0xC2,0xA2 |
U+0800–U+FFFF | 1110yyyy | 10yyyyxx | 10xxxxxx | | '€'U+20AC →11100010,10000010,10101100 →0xE2,0x82,0xAC |
U+10000–U+10FFFF | 11110zzz | 10zzyyyy | 10yyyyxx | 10xxxxxx | '𤭢'U+024B62 →11110000,10100100,10101101,10100010 →0xF0,0xA4,0xAD,0xA2 |
Oleh itu, 128 aksara pertama (US-ASCII) cuma memerlukan satu bait. 1,920 aksara seterusnya memerlukan dua bait untuk dikodkan, termasuk huruf-hurufrumi yang bertandadiakritik dan aksara-aksara dan abjad-abjadYunani,Cyril,Qipti,Armenia,Ibrani,Arab,Suryani danTāna. Tiga bait diperlukan untuk semua aksara yang lain dalamBasic Multilingual Plane (yang merangkumi hampir semua aksara yang kerap digunakan di dunia). Empat bait pula diperlukan untuk aksara-aksara dalamtahap-tahap Unicode yang lain, yang merangkumiaksara CJK yang jarang digunakan dan pelbagai tulisan bersejarah.
Dengan menyambungkan corak yang diberi di atas, bolehlah hendak menguruskan nombor-nombor yang lebih besar. Spesifikasi asal membenarkan urutan sehingga enam bait yang meliputi nombor-nombor sehingga 31 bit (had asalSet Aksara Sejagat). Namun begitu, pada November 2003, UTF-8 dihadkan olehRFC 3629 agar hanya menggunakan liputan takrifan Unicode yang asal, iaitu U+0000
to U+10FFFF
.
Dalam jadual berikut, bait-bait yang bertanda merah tidak boleh sama sekali wujud dalam urutan UTF-8 yang sah; yang bertanda hijau diwakili bait tunggal; yang bertanda putih hanya boleh wujud sebagai bait pertama dalam urutan berbilang bait; dan yang bertanda jingga hanya boleh wujud sebagai bait kedua atau selanjutnya dalam urutan berbilang bait:
Perduaan | Per-16-an | Perpuluhan | Catatan |
---|
00000000-01111111 | 00-7F | 0-127 | US-ASCII (bait tunggal) |
10000000-10111111 | 80-BF | 128-191 | Bait kedua, ketiga atau keempat dalam urutan berbilang bait |
11000000-11000001 | C0-C1 | 192-193 | Pengekodan terlalu panjang: permulaan urutan 2-bait, tetapi bertitik kod ≤ 127 |
11000010-11011111 | C2-DF | 194-223 | Bermulanya urutan 2 bait |
11100000-11101111 | E0-EF | 224-239 | Bermulanya urutan 3 bait |
11110000-11110100 | F0-F4 | 240-244 | Bermulanya urutan 4 bait |
11110101-11110111 | F5-F7 | 245-247 | Disekat olehRFC 3629: bermulanya urutan 4 bait untuk titik kod melebihi10FFFF |
11111000-11111011 | F8-FB | 248-251 | Disekat olehRFC 3629: bermulanya urutan 5 bait |
11111100-11111101 | FC-FD | 252-253 | Disekat olehRFC 3629: bermulanya urutan 6 bait |
11111110-11111111 | FE-FF | 254-255 | Tidak sah: tidak ditakrifkan oleh spesifikasi asal UTF-8 |
Bukan semua urutan bait adalah UTF-8 yang sah. Sesebuah penyahkod UTF-8 harus bersedia untuk berdepan dengan:
- bait-bait bertanda merah di jadual atas
- bait sambungan yang tidak dijangka
- bait permulaan yang tidak diikuti bait sambungan yang mencukupi
- urutan yang dinyahkodkan menjadi nilai yang sepatutnya menggunakan urutan yang lebih pendek (bentuk "terlalu panjang"/"overlong").
Templat:Character encoding