Dukungan Unicode dan Multibyte Character Set (MBCS)
Beberapa bahasa, misalnya, Jepang dan Cina, memiliki set karakter besar. Untuk mendukung pemrograman untuk pasar ini, Microsoft Foundation Class Library (MFC) memungkinkan dua pendekatan berbeda untuk menangani set karakter besar:
Unicode,
wchar_t
karakter lebar berbasis, dan string yang dikodekan sebagai UTF-16.Multibyte Character Sets (MBCS),
char
karakter dan string byte tunggal atau ganda berbasis yang dikodekan dalam set karakter khusus lokal.
Catatan
Microsoft merekomendasikan pustaka MFC Unicode untuk semua pengembangan baru.
Pustaka MBCS tidak digunakan lagi di Visual Studio 2013 dan Visual Studio 2015. Ini bukan lagi kasusnya.
Dimulai dengan Visual Studio 2017, pustaka MBCS tidak lagi ditolak dan tidak menghasilkan peringatan penghentian.
Dukungan MFC untuk Untai Unicode
Seluruh pustaka kelas MFC diaktifkan secara kondisional untuk karakter dan string Unicode yang disimpan dalam karakter luas sebagai UTF-16. Secara khusus, kelas CString
diaktifkan Unicode.
File pustaka, debugger, dan DLL ini digunakan untuk mendukung Unicode di MFC:
MFCversiU.LIB
MFCversiUD. LIB
MFCMversiU.LIB
MFCMversiUD. LIB
MFCSversiU.LIB
MFCSversiUD. LIB
UAFXCW. LIB
UAFXCWD. LIB
MFCversiU.PDB
MFCversiUD. PDB
MFCMversiU.PDB
MFCMversiUD. PDB
MFCSversiU.PDB
MFCSversiUD. PDB
UAFXCW. PDB
UAFXCWD. PDB
Versi MFCU.DLL
Versi MFCUD.DLL
Versi MFCMU.DLL
UD.DLL versiMFCM
(versi mewakili nomor versi file; misalnya, '140' berarti versi 14.0.)
CString
didasarkan pada TCHAR
jenis data. Jika simbol _UNICODE
didefinisikan untuk build program Anda, TCHAR
didefinisikan sebagai jenis wchar_t
, jenis pengodean karakter 16-bit. Jika tidak, TCHAR
didefinisikan sebagai char
, pengodean karakter normal 8-bit. Oleh karena itu, di bawah Unicode, CString
terdiri dari karakter 16-bit. Tanpa Unicode, ini terdiri dari karakter jenis char
.
Untuk menyelesaikan pemrograman Unicode aplikasi Anda, Anda juga harus:
_T
Gunakan makro untuk mengkodekan string harfiah secara kondisional agar portabel ke Unicode.Saat Anda meneruskan string, perhatikan apakah argumen fungsi memerlukan panjang karakter atau panjang dalam byte. Perbedaannya penting jika Anda menggunakan string Unicode.
Gunakan versi portabel dari fungsi penanganan string run-time C.
Gunakan jenis data berikut untuk karakter dan penunjuk karakter:
Gunakan
TCHAR
tempat Anda akan menggunakanchar
.Gunakan
LPTSTR
tempat Anda akan menggunakanchar
*.Gunakan
LPCTSTR
tempat Anda akan menggunakanconst char
*.CString
menyediakan operatorLPCTSTR
untuk mengonversi antaraCString
danLPCTSTR
.
CString
juga memasok konstruktor sadar Unicode, operator penugasan, dan operator perbandingan.
Referensi Pustaka Run-Time mendefinisikan versi portabel dari semua fungsi penanganan stringnya. Untuk informasi selengkapnya, lihat kategori Internasionalisasi.
Dukungan MFC untuk String MBCS
Pustaka kelas juga diaktifkan untuk set karakter multibyte, tetapi hanya untuk kumpulan karakter byte ganda (DBCS).
Dalam kumpulan karakter multibyte, karakter dapat memiliki lebar satu atau 2 byte. Jika lebarnya 2 byte, byte pertamanya adalah "byte prospek" khusus yang dipilih dari rentang tertentu, tergantung pada halaman kode mana yang digunakan. Diambil bersama-sama, prospek dan "byte jejak" menentukan pengodean karakter yang unik.
Jika simbol _MBCS
didefinisikan untuk build program Anda, ketik TCHAR
, yang CString
berbasis, petakan ke char
. Terserah Anda untuk menentukan byte mana dalam CString
byte prospek dan mana yang merupakan byte jejak. Pustaka run-time C menyediakan fungsi untuk membantu Anda menentukan ini.
Di bawah DBCS, string tertentu dapat berisi semua karakter ANSI byte tunggal, semua karakter byte ganda, atau kombinasi keduanya. Kemungkinan ini membutuhkan perawatan khusus dalam mengurai string. Ini termasuk CString
objek.
Catatan
Serialisasi string Unicode di MFC dapat membaca string Unicode dan MBCS terlepas dari versi aplikasi mana yang Anda jalankan. File data Anda portabel antara versi Unicode dan MBCS dari program Anda.
CString
fungsi anggota menggunakan versi "teks generik" khusus dari fungsi run-time C yang mereka panggil, atau mereka menggunakan fungsi sadar Unicode. Oleh karena itu, misalnya, jika CString
fungsi biasanya akan memanggil strcmp
, fungsi teks _tcscmp
generik yang sesuai sebagai gantinya. Bergantung pada bagaimana simbol _MBCS
dan _UNICODE
didefinisikan, _tcscmp
peta sebagai berikut:
Simbol | Fungsi |
---|---|
_MBCS Didefinisikan |
_mbscmp |
_UNICODE Didefinisikan |
wcscmp |
Tidak ada simbol yang ditentukan | strcmp |
Catatan
Simbol _MBCS
dan _UNICODE
saling eksklusif.
Pemetaan fungsi teks generik untuk semua rutinitas penanganan string run-time dibahas dalam Referensi Pustaka Run-Time C. Untuk daftar, lihat Internasionalisasi.
Demikian pula, CString
metode diimplementasikan dengan menggunakan pemetaan jenis data generik. Untuk mengaktifkan MBCS dan Unicode, MFC menggunakan TCHAR
untuk char
atau wchar_t
, LPTSTR
untuk char
* atau wchar_t*
, dan LPCTSTR
untuk const char
* atau const wchar_t*
. Ini memastikan pemetaan yang benar untuk MBCS atau Unicode.