Unicode 和多位元組字符集 MBCS

2021-09-05 15:34:38 字數 2342 閱讀 9035

有些國際市場以大字符集來使用日文和中文等語言。為了支援這些市場的程式設計,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字符集環境中,就需要針對此做出很多態別的轉換,反之亦然...