Unicode
Unicode adalah standar pengodean karakter di seluruh dunia. Sistem ini menggunakan Unicode secara eksklusif untuk manipulasi karakter dan string. Untuk deskripsi terperinci tentang semua aspek Unicode, lihat Standar Unicode.
Dibandingkan dengan mekanisme lama untuk menangani data karakter dan string, Unicode menyederhanakan pelokalan perangkat lunak dan meningkatkan pemrosesan teks multibahasa. Dengan menggunakan Unicode untuk mewakili data karakter dan string dalam aplikasi Anda, Anda dapat mengaktifkan kemampuan pertukaran data universal untuk pemasaran global, menggunakan satu file biner untuk setiap kode karakter yang mungkin. Unicode melakukan hal berikut:
- Memungkinkan kombinasi karakter apa pun, yang digambar dari kombinasi skrip dan bahasa apa pun, untuk bersama-sama dalam satu dokumen.
- Mendefinisikan semantik untuk setiap karakter.
- Menstandarkan perilaku skrip.
- Menyediakan algoritma standar untuk teks dua arah.
- Mendefinisikan pemetaan silang ke standar lain.
- Mendefinisikan beberapa pengodean dari set karakter tunggalnya: UTF-7, UTF-8, UTF-16, dan UTF-32. Konversi data di antara pengodean ini tidak ada kerugiannya.
Unicode mendukung banyak skrip yang digunakan oleh bahasa di seluruh dunia, dan juga sejumlah besar simbol teknis dan karakter khusus yang digunakan dalam penerbitan. Skrip yang didukung meliputi, tetapi tidak terbatas pada, Latin, Yunani, Sirilik, Ibrani, Arab, Devanagari, Thai, Han, Hangul, Hiragana, dan Katakana. Bahasa yang didukung meliputi, tetapi tidak terbatas pada, Jerman, Prancis, Inggris, Yunani, Rusia, Ibrani, Arab, Hindi, Thailand, Cina, Korea, dan Jepang. Unicode saat ini dapat mewakili sebagian besar karakter dalam penggunaan komputer modern di seluruh dunia, dan terus diperbarui untuk membuatnya lebih lengkap.
Fungsi yang mendukung Unicode dijelaskan dalam Konvensi untuk Prototipe Fungsi. Fungsi-fungsi ini menggunakan pengodean UTF-16 (karakter lebar), yang merupakan pengodean Unicode yang paling umum dan yang digunakan untuk pengodean Unicode asli pada sistem operasi Windows. Setiap nilai kode memiliki lebar 16 bit, berbeda dengan pendekatan halaman kode yang lebih lama untuk data karakter dan string, yang menggunakan nilai kode 8-bit. Penggunaan 16 bit memungkinkan pengodean langsung 65.536 karakter. Bahkan, alam semesta simbol yang digunakan untuk mentranskripsikan bahasa manusia bahkan lebih besar dari itu, dan titik kode UTF-16 dalam rentang U+D800 hingga U+DFFF digunakan untuk membentuk pasangan pengganti, yang merupakan pengodean karakter tambahan 32-bit. Lihat Pengganti dan Karakter Tambahan untuk diskusi lebih lanjut.
Kumpulan karakter Unicode mencakup banyak karakter gabungan, seperti U+0308 (" ̈"), yang menggabungkan dieresis atau umlaut. Unicode sering dapat mewakili glyph yang sama dalam bentuk ''composed'' atau ''decomposed' : misalnya, bentuk "Ä" yang disusun adalah titik kode Unicode tunggal "Ä" (U+00C4), sementara bentuk yang terurai adalah "A" + " ̈" (U+0041 U+0308). Unicode tidak mendefinisikan formulir yang terdiri untuk setiap glyph. Misalnya, huruf kecil Vietnam "o" dengan sirkumfleks dan tilde ("ỗ") diwakili oleh U+006f U+0302 U+0303 (o + Circumflex + Tilde). Untuk diskusi lebih lanjut tentang menggabungkan karakter dan masalah terkait, lihat Menggunakan Normalisasi Unicode untuk Mewakili String.
Untuk kompatibilitas dengan lingkungan 8-bit dan 7-bit, Unicode juga dapat dikodekan sebagai UTF-8 dan UTF-7. Meskipun fungsi yang diaktifkan Unicode di Windows menggunakan UTF-16, dimungkinkan juga untuk bekerja dengan data yang dikodekan dalam UTF-8 atau UTF-7, yang didukung di Windows sebagai halaman kode set karakter multibyte.
Aplikasi Windows baru harus menggunakan UTF-16 sebagai representasi data internalnya. Windows juga menyediakan dukungan ekstensif untuk halaman kode, dan penggunaan campuran dalam aplikasi yang sama dimungkinkan. Bahkan aplikasi baru berbasis Unicode terkadang harus bekerja dengan halaman kode. Alasan untuk ini dibahas di Halaman Kode.
Aplikasi dapat menggunakan fungsi MultiByteToWideChar dan WideCharToMultiByte untuk mengonversi antara string berdasarkan halaman kode dan string Unicode. Meskipun namanya mengacu pada "MultiByte", fungsi-fungsi ini bekerja sama baiknya dengan set karakter byte tunggal (SBCS), set karakter byte ganda (DBCS), dan halaman kode set karakter multibyte (MBCS).
Biasanya, aplikasi Windows harus menggunakan UTF-16 secara internal, hanya mengonversi sebagai bagian dari "lapisan tipis" di atas antarmuka yang harus menggunakan format lain. Teknik ini melindungi dari kehilangan dan kerusakan data. Setiap halaman kode mendukung karakter yang berbeda, tetapi tidak ada yang mendukung spektrum lengkap karakter yang disediakan oleh Unicode. Sebagian besar halaman kode mendukung subset yang berbeda, dikodekan secara berbeda. Halaman kode untuk UTF-8 dan UTF-7 adalah pengecualian, karena halaman tersebut mendukung kumpulan karakter Unicode lengkap, dan konversi antara pengodean ini dan UTF-16 tidak ada kerugiannya.
Data yang dikonversi langsung dari pengodean yang digunakan oleh satu halaman kode ke pengodean yang digunakan oleh orang lain mengalami kerusakan, karena nilai data yang sama pada halaman kode yang berbeda dapat mengodekan karakter yang berbeda. Bahkan ketika aplikasi Anda mengonversi sedekat mungkin dengan antarmuka, Anda harus memikirkan dengan cermat rentang data yang akan ditangani.
Data yang dikonversi dari Unicode ke halaman kode mengalami kehilangan data, karena halaman kode tertentu mungkin tidak dapat mewakili setiap karakter yang digunakan dalam data Unicode tertentu. Oleh karena itu, perhatikan bahwa WideCharToMultiByte mungkin kehilangan beberapa data jika halaman kode target tidak dapat mewakili semua karakter dalam string Unicode.
Saat memodernisasi aplikasi warisan berbasis halaman kode untuk menggunakan Unicode, Anda dapat menggunakan fungsi generik dan makro TEXT untuk mempertahankan satu set sumber untuk mengkompilasi dua versi aplikasi Anda. Satu versi mendukung Unicode dan versi lainnya berfungsi dengan halaman kode Windows. Dengan menggunakan mekanisme ini, Anda dapat mengonversi aplikasi yang sangat besar dari halaman kode Windows ke Unicode sambil mempertahankan sumber aplikasi yang dapat dikompilasi, dibangun, dan diuji di semua fase konversi. Untuk informasi selengkapnya, lihat Konvensi untuk Prototipe Fungsi.
Karakter dan string Unicode menggunakan jenis data yang berbeda dari karakter dan string berbasis halaman kode. Seiring dengan serangkaian makro dan konvensi penamaan, perbedaan ini meminimalkan kemungkinan pencampuran dua jenis data karakter secara tidak sengaja. Ini memfasilitasi pemeriksaan jenis pengkompilasi untuk memastikan bahwa hanya nilai parameter Unicode yang digunakan dengan fungsi yang mengharapkan string Unicode.