UNICODE和ANSI間的相互轉換

2021-06-23 05:18:02 字數 3660 閱讀 6936

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。

lpdefaultcharpfuseddefaultchar:只有當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 的形式表示,而每個 實體字元 就是乙個 字元 因此,...