**UTF-8** (UCS/Format Transformasi Unicode (UTF) 8-bit) ialah pengekodan aksara panjang boleh ubah untuk Unicode, yang mampu mewakili mana-mana aksara dalam piawaian Unicode, tetapi serasi dengan ASCII. Atas sebab-sebab inilah, UTF-8 semakin diutamakan untuk pengekodan e-mel, laman web, dan apa-apa sahaja yang menyimpan atau menstrimkan aksaranya.

UTF-8 mengekodkan setiap aksara (titik kod) dalam 1 hingga 4 oktet (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 semua protokol Internet mengenal pasti pengekodan yang digunakan untuk data aksara, lebih-lebih lagi pengekodan aksara yang disokong mestilah termasuk sekali UTF-8. Konsortium Mel Internet (*Internet Mail Consortium*, IMC) mencadangkan agar semua program e-mel mampu memaparkan dan menghasilkan mel dengan UTF-8.

Huraian
-------

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 skala titik 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 atas `x`, dan `z` pula 8 bit di atas `y`.

| Unicode | Bait1 | Bait2 | Bait3 | Bait4 | Contoh |
| --- | --- | --- | --- | --- | --- |
| `U+0000–U+007F` | `0*xxxxxxx*` |  |  |  | '$' `U+0024`→ `0**0100100**`→ `0x24` |
| `U+0080–U+07FF` | `110*yyyxx*` | `10*xxxxxx*` |  |  | '¢' `U+00A2`→ `110**00010**,10**100010**`→ `0xC2,0xA2` |
| `U+0800–U+FFFF` | `1110*yyyy*` | `10*yyyyxx*` | `10*xxxxxx*` |  | '€' `U+20AC`→ `1110**0010**,10**000010**,10**101100**`→ `0xE2,0x82,0xAC` |
| `U+10000–U+10FFFF` | `11110*zzz*` | `10*zzyyyy*` | `10*yyyyxx*` | `10*xxxxxx*` | '𤭢' `U+024B62`→ `11110**000**,10**100100**,10**101101**,10**100010**`→ `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-huruf rumi yang bertanda diakritik dan aksara-aksara dan abjad-abjad Yunani, Cyril, Qipti, Armenia, Ibrani, Arab, Suryani dan Tāna. Tiga bait diperlukan untuk semua aksara yang lain dalam Basic Multilingual Plane (yang merangkumi hampir semua aksara yang kerap digunakan di dunia). Empat bait pula diperlukan untuk aksara-aksara dalam tahap-tahap Unicode yang lain, yang merangkumi aksara 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 asal Set Aksara Sejagat). Namun begitu, pada November 2003, UTF-8 dihadkan oleh RFC 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 oleh RFC 3629: bermulanya urutan 4 bait untuk titik kod melebihi 10FFFF |
| 11111000-11111011 | F8-FB | 248-251 | Disekat oleh RFC 3629: bermulanya urutan 5 bait |
| 11111100-11111101 | FC-FD | 252-253 | Disekat oleh RFC 3629: bermulanya urutan 6 bait |
| 11111110-11111111 | FE-FF | 254-255 | Tidak sah: tidak ditakrifkan oleh spesifikasi asal UTF-8 |

### Urutan bait tidak sah

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*").

Rujukan
-------

1. ↑  "Moving to Unicode 5.1". Official Google Blog. May 5, 2008. Dicapai pada 2008-05-08.
2. ↑  "Usage of character encodings for websites". W3Techs. Dicapai pada 2009-09-25.
3. ↑  Alvestrand, H. (1998), "IETF Policy on Character Sets and Languages", *RFC 2277*, Internet Engineering Task Force
4. ↑  "Using International Characters in Internet Mail". Internet Mail Consortium. August 1, 1998. Diarkibkan daripada yang asal pada 2007-10-26. Dicapai pada 2007-11-08.

Templat:Character encoding