有些國際市場以大字符集來使用日文和中文等語言。為了支援這些市場的程式設計,microsoft 基礎類庫 (mfc) 支援以兩種方式處理大字符集:
unicode
多位元組字符集 (mbcs)
unicode 字串的 mfc 支援
整個類庫有條件地支援 unicode 字元和字串。特別是 cstring 類也支援 unicode。
注意 mfc 庫的 unicode 版本不會複製到硬碟上,除非您在「自定義」安裝時選擇它們。在其他型別的安裝過程中不會複製它們。如果試圖在沒有 mfc
unicode 檔案的情況下生成或執行 mfc unicode 應用程式,可能會出現錯誤。
要將這些檔案複製到硬碟上,請重新執行安裝程式並單擊「新增/移除功能」。單擊「語言工具」,單擊「visual c++」並單擊「visual c++
類和模板庫」,然後選擇「atl mfc 共享庫 unicode」和「atl mfc 靜態庫 unicode」。這會將以下檔案複製到硬碟上:
uafxcw.libuafxcw.pdbuafxcwd.libuafxcwd.pdb
mfcxxu.libmfcxxu.dbgmfcxxu.dllmfcxxud.lib
mfcxxud.pdbmfcxxud.dllmfcdxxud.libmfcdxxud.pdb
mfcdxxud.dllmfcnxxud.libmfcnxxud.pdbmfcnxxud.dll
mfcoxxud.libmfcoxxud.pdbmfcoxxud.dll
其中「xx」表示檔案的版本號,例如「70」表示 7.0 版本。
cstring 是基於 tchar 資料型別的。如果為程式的生成定義了符號 _unicode,則會將 tchar 定義為 wchar_t 型別(乙個 16
位的字元編碼型別);否則,會將它定義為 char(普通的 8 位字元編碼)。於是,在 unicode 下,cstring 由 16 位字元組成。如果沒有
unicode,它們則由 char 型別的字元組成。
要完成應用程式的 unicode 程式設計,還必須:
使用 _t 巨集有條件地編寫字串的**,使之可移植到 unicode。
當傳遞字串時,請注意函式引數要求的長度是以字元為單位還是以位元組為單位的。如果在使用 unicode 字串,這一區別是很重要的。
使用 c 執行時字串處理函式的可移植版本。
使用以下用於字元和字元指標的資料型別:
tchar 這裡將使用 char。
lptstr 這裡將使用 char*。
lpctstr 這裡將使用 const char*。cstring 提供 operator lpctstr 來在 cstring 和 lpctstr
之間進行轉換。
cstring 還提供識別 unicode 的建構函式,賦值運算子和比較運算子。
有關 unicode 程式設計的相關資訊,請參見 unicode 和 mbcs 和 unicode
主題。《執行時庫參考》中定義了所有字串處理函式的可移植版本。請參見類別國際化。
mbcs 字串的 mfc 支援
類庫還支援多位元組字符集,特別是雙位元組字符集 (dbcs)。
在這一方案下,字元的寬度可以是乙個位元組,也可是兩個位元組。如果字元的寬度是兩個位元組,那麼它的第乙個位元組就是乙個特殊的「前導位元組」,該位元組是根據所使用的**頁從某個特定範圍選定的。前導位元組和「尾位元組」合起來指定乙個唯一的字元編碼。
如果為程式的生成定義了符號 _mbcs,則型別 tchar(cstring 基於該型別)將對映到 char。由您來決定 cstring
中的哪些位元組是前導位元組,哪些位元組是尾位元組。c 執行時庫提供函式來幫助您進行確定。
在 dbcs 下,給定的字串可以包含所有的單位元組 ansi 字元、所有的雙位元組字元或兩者的組合。這些可能性需要您在分析字串(包括 cstring
物件)時要備加小心。
注意 mfc 中的 unicode 字串序列化能夠讀取 unicode 和 mbcs
字串,而不論執行的是哪個版本的應用程式。正因為如此,資料檔案在程式的 unicode 和 mbcs 版本之間是可移植的。
cstring 成員函式使用其呼叫的 c 執行時庫特殊的「一般文字」版本,或使用識別 unicode 的函式,如 lstrlen 或 lstrcpy。因此,如果
cstring 函式通常情況下呼叫 strcmp,那麼它會呼叫相應的一般文字函式 _tcscmp。根據符號 _mbcs 和 _unicode
定義方式的不同,_tcscmp 對映如下:
_mbcs 已定義_mbscmp
_unicode 已定義wcscmp
兩者都未定義strcmp
注意 符號 _mbcs 和 _unicode 是互相排斥的。
單位元組字符集,多位元組字符集,Unicode
我們在這裡介紹一下字元型別。這裡有3種編碼模式對應3種字元型別。第一種編碼型別是單子節字符集 single byte character set or sbcs 在這種編碼模式下,所有的字元都只用乙個位元組表示。ascii是sbcs。乙個位元組表示的0用來標誌sbcs字串的結束。第二種編碼模式是多位...
Unicode字符集和多字符集
由於各國語言的加入,ascii已經不能滿足資訊交流的需要,因此,為了能夠表示其它國家的文字,各國在ascii的基礎上制定了自己的字符集,它們正式的名稱應該是mbcs multi byte chactacter system,即多位元組字元系統 型別說明 unicode ansi 通用型別 字元wch...
Unicode和多位元組字符集 MBCS 雜談
這個估計是很多人曾經頭疼過的問題,現在的vc版本基本都支援unicode和多位元組字符集 mbcs 在進行mfc程式設計時vc的預設設定是unicode字符集。但是我們通常需要做一些 移植的工作,如果將多位元組字符集下的程式 移植到unicode字符集環境中,就需要針對此做出很多態別的轉換,反之亦然...