unicode和ansi間的相互轉換 ,主要通過以下兩個函式進行轉換:multibytetowidechar和widechartomultibyte。
函式功能:該函式對映乙個字串到乙個寬字元(unicode)的字串。由該函式對映的字串沒必要是多位元組字元組。
函式原型:
[cpp]view plain
copy
print?
intmultibytetowidechar(
__in uint
codepage,
__in dword
dwflags,
__in lpcstr
lpmultibytestr,
__in int
cbmultibyte,
__out lpwstr
lpwidecharstr,
__in int
cchwidechar
);
引數
codepage:指定執行轉換的字符集,這個引數可以為系統已安裝或有效的任何字符集所給定的值。
dwflags:一組未標記用以指出是否未轉換成預作或寬字元(若組合形式存在),是否使用象形文本替代控制字元,以及如何處理無效字元。
lpmultibytestr:指向將被轉換字串的字元。
cchmultibyte:指定由引數lpmultibytestr指向的字串中位元組的個數。如果
lpmultibytestr指定的字串以空字元終止,可以設定為-1(如果字串不是以空字元中止,設定為-1可能失敗,可能成功),此引數設定為0函式將失敗。
lpwidecharstr:指向接收被轉換字串的緩衝區。
cchwidechar:指定由引數lpwidecharstr指向的緩衝區的位元組數。若此值為零,函式返回緩衝區所必需的寬字元數,在這種情況下,lpwidecharstr中的緩衝區不被使用。
返回值
如果函式執行成功,並且cchwidechar不為零,返回值是由lpwidecharstr指向的緩衝區中寫入的寬字元數;如果函式執行成功,並且cchwidechar為零,返回值是接收到待轉換字串的緩衝區所需求的寬字元數大小。如果函式執行失敗,返回值為零。若想獲得更多錯誤資訊,請呼叫getlasterror函式。
函式功能:該函式對映乙個unicode字串到乙個多位元組字串。
函式原型:
[cpp]view plain
copy
print?
intwidechartomultibyte(
__in uint
codepage,
__in dword
dwflags,
__in lpcwstr
lpwidecharstr,
__in int
cchwidechar,
__out lpstr
lpmultibytestr,
__in int
cbmultibyte,
__in lpcstr
lpdefaultchar,
__out lpbool
lpuseddefaultchar
); 引數
codepage:指定執行轉換的**頁,這個引數可以為系統已安裝或有效的任何**頁所給定的值。
dwflags:確定windows如何處理「復合」 unicode字元,它是一種後面帶讀音符號的字元。
lpwidecharstr:指向將被轉換的unicode字串。
cchwidechar:指定由引數lpwidecharstr指向的緩衝區的字元個數。如果這個值為-1,字串將被設定為以null為結束符的字串,並且自動計算長度。
lpmultibytestr:指向接收被轉換字串的緩衝區。
cchmultibyte:指定由引數lpmultibytestr指向的緩衝區最大值(用位元組來計量)。若此值為零,函式返回lpmultibytestr指向的目標緩衝區所必需的位元組數,在這種情況下,lpmultibytestr引數通常為null。
lpdefaultchar和pfuseddefaultchar:只有當widechartomultibyte函式遇到乙個寬位元組字元,而該字元在ucodepage引數標識的**頁中並沒有它的表示法時,widechartomultibyte函式才使用這兩個引數。如果寬位元組字元不能被轉換,該函式便使用lpdefaultchar引數指向的字元。如果該引數是null(這是大多數情況下的引數值),那麼該函式使用系統的預設字元。該預設字元通常是個問號。這對於檔名來說是危險的,因為問號是個萬用字元。pfuseddefaultchar引數指向乙個布林變數,如果unicode字串中至少有乙個字元不能轉換成等價多位元組字元,那麼函式就將該變數置為true。如果所有字元均被成功地轉換,那麼該函式就將該變數置為false。當函式返回以便檢查寬位元組字串是否被成功地轉換後,可以測試該變數。
返回值
如果函式執行成功,並且cchmultibyte不為零,返回值是由 lpmultibytestr指向的緩衝區中寫入的位元組數;如果函式執行成功,並且cchmultibyte為零,返回值是接收到待轉換字串的緩衝區所必需的位元組數。如果函式執行失敗,返回值為零。若想獲得更多錯誤資訊,請呼叫getlasterror函式。
#include
bool stringreversew(pwstr pwidecharstr, dword cchlength);
bool stringreversea(pstr pmultibytestr, dword cchlength);
#ifdef unicode
#define stringreverse stringreversew
#else
#define stringreverse stringreversea
#endif //unicode
bool stringreversew(pwstr pwidecharstr, dword cchlength)
return true;
}bool stringreversea(pstr pmultibytestr, dword cchlength)
int winapi winmain( __in hinstance hinstance, __in_opt hinstance hprevinstance, __in lpstr lpcmdline, __in int nshowcmd )
Unicode資料型別(與ANSI關係和相互轉化)
unicode資料型別 與ansi關係和相互轉化 1,windows定義unicode資料型別 wchar unicode字元 pwstr 指向unicode字串的指標 pcwstr 指向乙個恆定的unicode字串的指標 以上都是unicode字元和字串。同時windows定義了ansi unic...
編碼基礎概念 ANSI和unicode
ansi指american national standards institute 美國國家標準學會 ansi編碼不是一種具體的編碼方式,而是一種指定在某些環境下使用某些編碼方式的標準。比如,在中文環境中ansi的編碼標準為gbk,在日語環境中ansi的編碼標準則是shift jis編碼。asci...
VB中的Unicode 和 Ansi 格式
vb中的unicode 和 ansi 格式 visual basic 32 bit 版本的字串處理採用 unicode,也就是說字串在 vb 內部是以unicode 的格式來存放。何謂 unicode?簡單的說,就是每乙個字元都是以 2 byte 的形式表示,而每個 實體字元 就是乙個 字元 因此,...