MultiByteToWideChar

MultiByteToWideChar

MultiByteToWideChar是一種windows API 函式,該函式映射一個字元串到一個寬字元(unicode)的字元串。由該函式映射的字元串沒必要是多位元組字元組,因此該函式可用性不是太大。

基本介紹

  • 中文名:MultiByteToWideChar
  • 映射:一個字元串到一個寬字元的字元串
  • 參數:CodePage
  • 注意:GetLastError
  • 返回值:ERROR_INSUFFICIENT
簡介,參數,返回值,注意,

簡介

函式功能:該函式映射一個字元串到一個寬字元(unicode)的字元串。由該函式映射的字元串沒必要是多位元組字元組。
函式原型:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);
補充:如果ANSI代碼頁允許在不同的計算機上不相同,甚至在單台計算機上不一樣,將會導致數據崩潰。為了代碼頁一致性,應用程式應該使用Unicode編碼,如UTF-8或者UTF-16,而不是使用特殊的代碼頁,除了早期標準或者數據格式化不允許使用Unicode編碼。在特殊情況下,有些函式不允許使用Unicode編碼,應用程式應在協定允許的情況下在數據流中用合適的編碼名稱標識。在HTML、XML、HTTP等檔案中都允許標識,但TEXT文本不允許這樣做。

參數

CodePage:指定執行轉換的字元集,這個參數可以為系統已安裝或有效的任何字元集所給定的值。你也可以指定其為下面的任意一值:
CP_ACP:ANSI字元集;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;
CP_SYMBOL:符號字元集(42);CP_THREAD_ACP:當前執行緒ANSI代碼頁;
CP_UTF7:使用UTF-7轉換;CP_UTF8:使用UTF-8轉換。
dwFlags:一組位標記用以指出是否未轉換成預作或寬字元(若組合形式存在),是否使用象形文字替代控制字元,以及如何處理無效字元。你可以指定下面是標記常量的組合,含義如下:
MB_PRECOMPOSED:通常使用預作字元——就是說,由一個基本字元和一個非空字元組成的字元只有一個單一的字元值。這是預設的轉換選擇。不能與
MB_COMPOSITE值一起使用。
MB_COMPOSITE:通常使用組合字元——就是說,由一個基本字元和一個非空字元組成的字元分別有不同的字元值。不能與MB_PRECOMPOSED值一起使用。
MB_ERR_INVALID_CHARS:如果函式遇到無效的輸入字元,它將運行失敗,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。
MB_USEGLYPHCHARS:使用象形文字替代控制字元
組合字元由一個基礎字元和一個非空字元構成,每一個都有不同的字元值。每個預作字元都有單一的字元值給基礎/非空字元的組成。在字元è中,e就是基礎字元,而重音符標記就是非空字元。
函式的預設動作是轉換成預作的形式。如果預作的形式不存在,函式將嘗試轉換成組合形式。
標記MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而標記MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS則不管其它標記如何都可以設定。
lpMultiByteStr:指向將被轉換字元串的字元。
cchMultiByte:指定由參數lpMultiByteStr指向的字元串中位元組的個數。如果lpMultiByteStr指定的字元串以空字元終止,可以設定為-1(如果字元串不是以空字元中止,設定為-1可能失敗,可能成功),此參數設定為0函式將失敗。
lpWideCharStr:指向接收被轉換字元串的緩衝區
cchWideChar:指定由參數lpWideCharStr指向的緩衝區的寬字元個數。若此值為零,函式返回緩衝區所必需的寬字元數,在這種情況下,lpWideCharStr中的緩衝區不被使用。

返回值

如果函式運行成功,並且cchWideChar不為零,返回值是由lpWideCharStr指向的緩衝區中寫入的寬字元數;如果函式運行成功,並且cchWideChar為零,返回值是接收到待轉換字元串的緩衝區所需求的寬字元數大小。如果函式運行失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函式。它可以返回下面所列錯誤代碼:
ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;
ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。

注意

指針lpMultiByteStr和lpWideCharStr必須不一樣。如果一樣,函式將失敗,GetLastError將返回ERROR_INVALID_PARAMETER的值。
如果MB_ERR_INVALID_CHARS被設定並且在資源字元串中遇到無效的字元時,函式將失敗。如果MB_ERR_INVALID_CHARS不被設定,或是DBCS串中發現了頭位元組而沒有有效的尾位元組,無效字元將轉換為預設字元,但不是資源字元串中的預設字元。當無效字元被發現,且MB_ERR_INVALID_CHARS值被設定,函式返回零,GetLastErro顯示ERROR_NO_UNICODE_TRANSLATION的出錯信息。
如果cchMultiByte為-1,需要注意返回值為包括零字元在內的字元串的總長度比求字元長度函式得到的返回值大1。
Windows CE:不支持參數CodePage中的CP_UTF7和CP_UTF8的值,以及參數dwFlags中的WC_NO_BEST_FIT_CHARS值。
速查:Windows NT 3.1、Windows 95以上、Windows CE 1.0以上,頭檔案:winnls.h;庫檔案:kernel32.lib。需要引用的頭檔案:windows.h。

相關詞條

熱門詞條

聯絡我們