Bagikan melalui


Menulis, Memetakan, dan Mengurutkan Karakter EUDC dan PUA

Aplikasi menulis karakter yang ditentukan pengguna akhir (EUDC) dan karakter area penggunaan privat (PUA) ke layar atau printer sama seperti mereka menulis karakter lain, dengan menggunakan fungsi output seperti TextOut dan ExtTextOut. Fungsi-fungsi ini secara otomatis mengambil informasi karakter dari font karakter EUDC atau PUA jika EUDC diaktifkan. Untuk informasi selengkapnya, lihat Karakter Area Penggunaan Akhir User_Defined dan Penggunaan Privat.

Saat menulis karakter EUDC atau PUA, pengoperasian fungsi output teks bergantung pada font yang saat ini dipilih. Jika font yang dipilih adalah font karakter EUDC atau PUA terintegrasi, fungsi mengambil informasi karakter dari font tersebut. Jika font yang dipilih adalah font TrueType kumpulan karakter byte ganda (DBCS) yang memiliki font EUDC terpisah terkait, fungsi mengambil informasi dari font EUDC yang ditentukan. Demikian pula, jika font yang dipilih adalah font TrueType Unicode yang memiliki font karakter PUA terpisah terkait, fungsi mengambil informasi dari font karakter PUA. Jika font yang dipilih tidak memiliki font karakter EUDC atau PUA terkait, fungsi mengambil informasi dari font EUDC default sistem. Jika karakter tidak berada dalam font EUDC default sistem atau tidak ada font EUDC default sistem, fungsi menulis karakter default yang ditentukan oleh font yang dipilih.

Aplikasi dapat memetakan EUDC ke dan dari Unicode dengan menggunakan fungsi MultiByteToWideChar dan WideCharToMultiByte . Fungsi MultiByteToWideChar memetakan sebagian besar EUDC ke karakter di Unicode PUA. Namun, untuk mendukung standar nasional atau regional tertentu, beberapa EUDC dapat dipetakan ke titik kode Unicode non-PUA. Fungsi WideCharToMultiByte memetakan karakter di PUA ke rekan EUDC-nya, jika ada pemetaan seperti itu dan jika titik kode tidak memiliki pemetaan non-PUA yang valid di Unicode. Tidak semua halaman kode memiliki rentang EUDC. Halaman kode yang ditentukan dalam panggilan ke WideCharToMultiByte harus berisi rentang kode EUDC agar pemetaan ke rentang EUDC terjadi. Jika halaman kode tidak berisi rentang kode EUDC, fungsi mengambil karakter default untuk karakter apa pun di Unicode PUA.

MultiByteToWideChar dan WideCharToMultiByte tidak menjamin pemetaan pulang pergi. Dengan kata lain, dimungkinkan untuk memulai dengan string multibyte tertentu yang berisi EUDC, memetakan string ke Unicode dengan MultiByteToWideChar dan memetakannya kembali ke DBCS asli dengan WideCharToMultiByte, dan berakhir dengan hasil yang tidak identik dengan string asli. Aplikasi yang mengandalkan pemetaan EUDC ke Unicode harus memastikan bahwa semua karakter yang diperlukan dapat melakukan komunikasi dua arah antara halaman kode yang sesuai area EUDC dan Unicode PUA.

Aplikasi tidak boleh mencoba memetakan EUDC dari satu halaman kode ke halaman lain. Jika aplikasi dimulai dengan EUDC dari satu halaman kode, memetakannya ke Unicode dengan MultiByteToWideChar, dan memetakan ke DBCS yang berbeda dengan WideCharToMultiByte, tidak ada jaminan tentang hasilnya. Karakter asli mungkin dipetakan ke EUDC yang berbeda di halaman kode tujuan, atau mungkin dipetakan sebagai karakter yang tidak terdefinisi. Demikian pula, memetakan string Unicode ke halaman kode yang memiliki rentang EUDC dapat memiliki hasil yang tidak diinginkan. Jika string Unicode berisi titik kode PUA, ada kemungkinan bahwa titik kode akan dipetakan ke EUDC yang tidak mewakili karakter yang sama.

Aplikasi dapat membandingkan string DBCS yang berisi EUDC dengan menggunakan versi ANSI dari fungsi CompareString . Fungsi ini secara efektif memetakan karakter ke Unicode sebelum membandingkan nilai karakter. Aplikasi dapat membuat kunci pengurutan untuk string dengan menggunakan versi ANSI dari fungsi LCMapString dan nilai LCMAP_SORTKEY. Fungsi ini secara efektif memetakan karakter ke Unicode terlebih dahulu. Semua karakter dalam PUA diurutkan setelah semua karakter Unicode lainnya. Di dalam area, karakter diurutkan dalam urutan numerik. Jika aplikasi mencoba mengambil informasi CTYPE untuk EUDC dengan menggunakan fungsi GetStringTypeA , fungsi mengambil NULL untuk setiap karakter.

Menggunakan Unicode dan Kumpulan Karakter