Halaman

Sabtu, 10 Oktober 2020

STRING CHAR UNICODE UTF-32 UTF-16 DAN UTF-8

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 1Byte 2Byte 3Byte 4Byte 5Byte 6
  7U+0000U+007F10xxxxxxx
11U+0080U+07FF2110xxxxx10xxxxxx
16U+0800U+FFFF31110xxxx10xxxxxx10xxxxxx
21U+10000U+1FFFFF411110xxx10xxxxxx10xxxxxx10xxxxxx
26U+200000U+3FFFFFF5111110xx10xxxxxx10xxxxxx10xxxxxx10xxxxxx
31U+4000000U+7FFFFFFF61111110x10xxxxxx10xxxxxx10xxxxxx10xxxxxx10xxxxxx

Jadi, cara membedakan apakah karakter tersebut 1byte, 2byte, 3byte atau 4byte adalah dari bilangan biner yang digunakan. Jika awalnya adalah 0, berarti jumlah byte merepresentasikan karakter tersebut adalah 1byte. Jika awalnya adalah 110, berarti ukuran karakter tersebut 2byte, 1110 untuk 3byte, 11110 untuk 4byte dan seterusnya. Byte selanjutnya jika berisi 10 berarti sambungan dari byte sebelumnya. Maka dapat diidentifikasi 0100 0001 adalah karakter yang hanya 1byte (A) , dan 11011101 10010100 adalah karakter 2byte (ݔ). 

Tidak ada komentar:

Dasar

TUTORIAL 1 : DASAR BAHASA ASSEMBLY WINDOWS 32bit MASM32 CONSOLE UNTUK PEMULA

Alhamdulillahirabbilalamin, pada saat ini kita semua masih diberi kesempatan untuk terus belajar, kita niatkan mudah-mudahan apa yang kita l...

Postingan Populer