Dalam bahasa tingkat tinggi seperti java dan python, string mungkin tidak memerlukan perhatian khusus. Tapi pada bahasa c/c++ string perlu ditangani secara kusus. Terlebih lagi dalam bahasa assembly. Dulu ketika komputer hanya dijual di Amerika, tidak ada masalah encoding karena ASCII sudah cukup untuk digunakan sebagai pengkodean karakter yang ukurannya cuma memerlukan 1byte.
Seiring perkembangan komputer dan internet, hal tersebut menjadi masalah karena tidak dapat menampilkan karakter tertentu seperti huruf korea dan arab. Masalah tersebut diatasi dengan teknologi code page. Jadi setiap negara memiliki code page masing-masing dalam pengkodean karakternya. Tapi hal tersebut menimbulkan masalah baru lagi, karakter untuk bahasa berbeda tidak dapat ditampilkan dalam satu mesin yang sama. Maka lahirlah utf-16 dan utf-32. UTF-16 menyimpan karakter dengan ukuran 2byte sedangkan UTF-32 menyimpan karakter dalam ukuran 4byte. Masalah lain yang muncul adalah adanya pemborosan storage penyimpanan ketika karakter yang disimpan hanya ASCII dan harus disimpan dengan menghabiskan 2byte atau 4byte, ini dirasa overkill.
Sederet masalah diatas akhirnya terpecahkan dengan lahirnya UTF-8. UTF-8 menyimpan karakter dengan ukuran 1byte, 2byte, 3byte sampai 4byte tergantung kebutuhan. ASCII disimpan hanya menggunakan 1byte. Masalah dari sistem utf-8 ini adalah perlu identifikasi khusus untuk menentukan karakter. Misalnya "Aݔ" dalam hexadecimal "410754", bagaimana cara komputer membedakan karakter pertama adalah 0x41 dan karakter kedua dua byte 0x0754. Mengapa tidak 0x4107 dan 0x54 ? Nah, memang sulit dari sudut pandang bahasa tingkat tinggi. Tapi dari sudut pandang assembly semuanya menjadi jelas. Berikut tabel dari wikipedia bahasa indonesia :
| 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 |
Tidak ada komentar:
Posting Komentar