浠涔堟槸ANSI錛屼粈涔堝張鏄疷NICODE鍛紵鍏跺疄榪欐槸涓ょ涓嶅悓鐨勭紪鐮佹柟寮忔爣鍑嗭紝ANSI涓殑瀛楃閲囩敤8bit錛岃孶NICODE涓殑瀛楃閲囩敤16bit銆傦紙瀵逛簬瀛楃鏉ヨANSI浠ュ崟瀛楄妭瀛樻斁鑻辨枃瀛楃錛屼互鍙屽瓧鑺傚瓨鏀句腑鏂囩瓑瀛楃,鑰孶nicode涓嬶紝鑻辨枃鍜屼腑鏂囩殑瀛楃閮戒互鍙屽瓧鑺傚瓨鏀撅級Unicode鐮佷篃鏄竴縐嶅浗闄呮爣鍑嗙紪鐮侊紝閲囩敤浜屼釜瀛楄妭緙栫爜錛屼笌ANSI鐮佷笉鍏煎銆傜洰鍓嶏紝鍦ㄧ綉緇溿乄indows緋葷粺鍜屽緢澶氬ぇ鍨嬭蔣浠朵腑寰楀埌搴旂敤銆?bit鐨凙NSI緙栫爜鍙兘琛ㄧず256縐嶅瓧絎︼紝琛ㄧず26涓嫳鏂囧瓧姣嶆槸緇扮話鏈変綑鐨勶紝浣嗘槸琛ㄧず姹夊瓧錛岄煩鍥借絳夋湁鐫鎴愬崈涓婁竾涓瓧絎︾殑闈炶タ鏂瑰瓧絎﹁偗瀹氬氨涓嶅浜嗭紝姝f槸濡傛鎵嶅紩鍏ヤ簡UNICODE鏍囧噯銆?nbsp;
鍦ㄨ蔣浠跺紑鍙戜腑錛岀壒鍒槸浣跨敤C璇█鐨勪竴浜涙湁鍏沖瓧絎︿覆澶勭悊鐨勫嚱鏁幫紝ANSI鍜孶NICODE鏄尯鍒嗘槸鐢ㄧ殑錛岄偅涔圓NSI綾誨瀷鐨勫瓧絎﹀拰UNICODE綾誨瀷鐨勫瓧絎﹀浣曞畾涔夛紝濡備綍浣跨敤鍛紵ANSI鍜孶NICODE鍙堝浣曡漿鎹㈠憿錛?nbsp;
涓錛庡畾涔夐儴鍒嗭細
ANSI錛歝har str[1024]; 鍙敤瀛楃涓插鐞嗗嚱鏁幫細strcpy( ), strcat( ), strlen( )絳夌瓑銆?br />UNICODE錛歸char_t str[1024]錛涘彲鐢ㄥ瓧絎︿覆澶勭悊鍑芥暟
浜岋紟鍙敤鍑芥暟錛?nbsp;
ANSI錛氬嵆char錛屽彲鐢ㄥ瓧絎︿覆澶勭悊鍑芥暟錛歴trcat( ),strcpy( ), strlen( )絳変互str鎵撳ご鐨勫嚱鏁般?nbsp;
UNICODE錛氬嵆wchar_t 鍙敤瀛楃涓插鐞嗗嚱鏁幫細wcscat(),wcscpy(),wcslen()絳変互wcs鎵撳ご鐨勫嚱鏁般?nbsp;
涓夛紟緋葷粺鏀寔
Windows 98 錛氬彧鏀寔ANSI銆?nbsp;
Windows 2k 錛氭棦鏀寔ANSI鍙堟敮鎸乁NICODE銆?nbsp;
Windows CE 錛氬彧鏀寔UNICODE銆?nbsp;
璇存槑
1 鍦–OM閲岄潰鍙敮鎸乁NICODE銆?nbsp;
2錛嶹indows 2000鏁翠釜OS緋葷粺閮芥槸鍩轟簬UNICODE鐨勶紝涓烘鍦╳indows 2000 涓嬩嬌鐢ˋNSI鏄渶瑕佷粯鍑轟唬浠風殑錛岃櫧鐒跺湪緙栫爜涓婁笉鐢ㄤ換浣曠殑杞崲錛屼絾鏄繖縐嶈漿鍖栨槸闅愯棌鐨勶紝鏄崰鐢ㄧ郴緇熻祫婧愮殑錛圕PU錛屽唴瀛橈級銆?nbsp;
3 鍦╓indows 98涓嬪繀欏諱嬌鐢║NICODE錛屽垯闇瑕佽嚜宸辨墜鍔ㄧ殑緙栫爜鍒囨崲銆?nbsp;
鍥涳紟濡備綍鍖哄垎錛?nbsp;
鍦ㄦ垜浠蔣浠跺紑鍙戜腑寰寰闇瑕佸嵆鏀寔ANSI鍙堟敮鎸乁NICODE錛屼笉鍙兘鍦ㄨ姹傜被鍨嬭漿鎹㈢殑鏃跺欙紝閲嶆柊鏀瑰彉瀛楃涓茬殑綾誨瀷錛屽拰浣跨敤浜庡瓧絎︿覆涓婄殑鎿嶄綔鍑芥暟銆備負姝? 鏍囧噯C榪愯鏈熷簱鍜學indows 鎻愪緵浜嗗畯瀹氫箟鐨勬柟寮忋?nbsp;
鍦–璇█閲岄潰鎻愪緵浜?_UNICODE瀹忥紙鏈変笅鍒掔嚎錛夛紝鍦╓indows閲岄潰鎻愪緵浜哢NICODE瀹忥紙鏃犱笅鍒掔嚎錛夛紝鍙瀹氫簡_UNICODE瀹忓拰UNICODE瀹忥紝緋葷粺灝變細鑷姩鍒囨崲鍒癠NICODE鐗堟湰錛屽惁鍒欙紝緋葷粺鎸夌収ANSI鐨勬柟寮忚繘琛岀紪璇戝拰榪愯銆?nbsp;
鍙畾涔変簡瀹忓茍涓嶈兘瀹炵幇鑷姩鐨勮漿鎹紝浠栬繕闇瑕佷竴緋誨垪鐨勫瓧絎﹀畾涔夋敮鎸併?nbsp;
1. TCHAR
濡傛灉瀹氫箟浜哢NICODE瀹忓垯TCHAR琚畾涔変負wchar_t銆?nbsp;
typedef wchar_t TCHAR;
鍚﹀垯TCHAR琚畾涔変負char
typedef char TCHAR;
2錛嶭PTSTR
濡傛灉瀹氫箟浜哢NICODE瀹忓垯LPTSTR琚畾涔変負LPWSTR銆傦紙浠ュ墠涓鐩翠笉鐭ラ亾LPWSTR鏄粈涔堜笢涓滐紝緇堜簬鏄庣櫧浜嗭級
typedef LPTSTR LPWSTR;
鍚﹀垯TCHAR琚畾涔変負char
typedef LPTSTR LPSTR;
琛ュ厖涓涓嬶細
UTF-8鏄彲浠ョ敤浜庣湡姝g殑嫻佸紡浼犺緭鐨勶紝Unicode鏄竴縐嶇紪鐮佹柟妗?nbsp;
鎴戠殑鐞嗚В鏄疷TF-8鏄疷nicode鐨勪竴縐嶅叿浣撳疄鐜般傜被浼肩殑瀹炵幇榪樻湁UTF錛?6絳夌瓑銆?/p>
ANSI/Unicode瀛楃鍜屽瓧絎︿覆
TChar.h鏄疭tring.h鐨勪慨鏀癸紝鐢ㄤ簬鍒涘緩ANSI/Unicode閫氱敤瀛楃涓層?/p>
Unicode瀛楃涓茬殑姣忎釜瀛楃閮芥槸16浣嶇殑銆?/p>
Win9x鍙敮鎸丄NSI錛沇in2000/XP/2003鏀寔ANSI/Unicode錛沇inCE鍙敮鎸乁nicode
闄勶細鏈夐儴鍒哢nicode鍑芥暟涔熷彲浠ュ湪Win9X涓嬌鐢紝浣嗗彲鑳戒細鍑虹幇鎰忔兂涓嶅埌閿欒銆?/p>
wchar_t鏄疷nicode瀛楃鐨勬暟鎹被鍨嬨?/p>
鎵鏈夌殑Unicode鍑芥暟鍧囦互wcs寮澶達紝ANSI鍑芥暟鍧囦互str寮澶達紱ANSI C瑙勫畾C榪愯鏈熷簱鏀寔ANSI鍜孶nicode
ANSI Unicode
char *strcat(char *, const char *) wchar_t *wcscat(wchar_t *, const wchar_t *)
char *strchr(const char * , int) wchar_t *wcschr(const wchar_t * , int)
int strcmp(const char *, const char *) int wcscmp(const wchar_t *, const wchar_t *)
char *strcpy(char *, const char *) wchar_t *wcscpy(wchar_t *, const wchar_t *)
size_t strlen(const char *) wchar_t wcslen(const wchar_t *)
L" wash " : 鐢ㄤ簬灝咥NSI瀛楃涓茶漿鎹負Unicode瀛楃涓詫紱
_TEXT(" wash ")鏍規嵁鏄惁瀹氫箟Unicode鎴朹Unicode榪涜杞崲銆?br /> 闄勶細_Unicode鐢ㄤ簬C榪愯搴擄紱Unicode鐢ㄤ簬Windows澶存枃浠躲?/p>
ANSI/Unicode閫氱敤鏁版嵁綾誨瀷
Both錛圓NSI/Unicode錛?nbsp; ANSI Unicode
LPCTSTR LPCSTR LPCWSTR
LPTSTR LPSTR LPWSTR
PCTSTR PCSTR PCWSTR
PTSTR PSTR PWSTR
TBYTE(TCHAR) CHAR WCHAR
鍦ㄨ璁ll鏃舵渶濂芥彁渚汚NSI鍜孶nicode鍑芥暟錛孉NSI鍑芥暟鍙敤浜庡垎閰嶅唴瀛橈紝灝嗗瓧絎﹁漿鎹負Unicode瀛楃錛岀劧鍚庤皟鐢║nicode鍑芥暟銆?/p>
鏈濂戒嬌鐢ㄦ搷浣滅郴緇熷嚱鏁幫紝灝戜嬌鐢ㄦ垨涓嶅疄鐢–榪愯鏈熷嚱鏁?br /> eg錛氭搷浣滅郴緇熷瓧絎︿覆鍑芥暟錛坰hlWApi.h錛?br /> StrCat(), StrChr(), StrCmp(), StrCpy()絳?br /> 娉ㄦ剰瀹冧滑鍖哄垎澶у皬鍐欙紝涔熷尯鍒咥NSI鍜孶nicode鐗堟湰
闄勶細ANSI鐗堝嚱鏁板湪鍘熷嚱鏁板悗鍔犲ぇ鍐欏瓧姣岮
Unicode鍑芥暟鍦ㄥ師鍑芥暟鍚庡姞澶у啓瀛楁瘝W
鎴愪負絎﹀悎ANSI鍜孶nicode鐨勫嚱鏁?br /> ? 灝嗘枃鏈覆瑙嗕負瀛楃鏁扮粍錛岃屼笉鏄痗 h a r s鏁扮粍鎴栧瓧鑺傛暟緇勩?br /> ? 灝嗛氱敤鏁版嵁綾誨瀷錛堝T C H A R鍜孭 T S T R錛夌敤浜庢枃鏈瓧絎﹀拰瀛楃涓層?br /> ? 灝嗘樉寮忔暟鎹被鍨嬶紙濡侭 Y T E鍜孭 B Y T E錛夌敤浜庡瓧鑺傘佸瓧鑺傛寚閽堝拰鏁版嵁緙撳瓨銆?br /> ? 灝員 E X T瀹忕敤浜庡師涔夊瓧絎﹀拰瀛楃涓層?br /> ? 淇敼瀛楃涓茶繍綆楅棶棰?銆?br /> 濡傦細sizeof(szBuffer) -> sizeof(szBuffer) / sizeof(TCHAR)
malloc(charNum) -> malloc(charNum * sizeof(TCHAR))
瀵筓nicode瀛楃鎿嶄綔鐨勫嚱鏁拌繕鏈夛細錛堜篃鏈堿NSI鍜孶nicode鐗堟湰錛?br /> lstrcat() , lstrcmp() / lstrcmpi()[ 瀹冧滑鍦ㄥ唴閮ㄨ皟鐢–ompareString() ], lstrcpy(), lstrlen()
榪欎簺鏄綔涓哄畯瀹炵幇鐨勩?/p>
C榪愯鏈熷嚱鏁?nbsp; windows鍑芥暟
tolower() PTSTR CharLower(PTSTR pszString)
toupper() PTSTR CharUpper(PTSTR pszString)
isalpha() BOOL IsCharAlpha(TCHAR ch)
BOOL ISCharAlphaNumeric(TCHAR ch)
islower() BOOL IsCharLower(TCHAR ch)
isupper() BOOL IsCharUpper(TCHAR ch)
print() wsprintf()
杞崲Buffer錛欴WORD CharLowerBuffer(PTSTR pszString , DWORD cchString)
DWORD CharUpperBuffer(PTSTR pszString , DWORD cchString)
涔熷彲杞崲鍗曚釜瀛楃錛屽錛歍CHAR cLowerCaseChar = CharLower((PTSTR)szString[0])
紜畾瀛楃鏄疉NSI鎴朥nicode
BOOL IsTextUnicode(
const VOID * pBuffer, //input buffer to be examined
int cb, //size of input buffer
LPINT lpi //options
)
闄勶細姝ゅ嚱鏁板湪Win9x緋葷粺涓紝娌℃湁瀹炵幇浠g爜錛屽緇堣繑鍥濬ALSE
Unicode涓嶢NSI涔嬮棿鐨勮漿鎹?br /> char szA[40];
wchar szW[40];
// Normal sprintf : all string are ANSI
sprintf( szA , " %s " , " ANSI str ");
// Convert Unicode string to ANSI
sprintf( szA, " %S " , L" Unicode str ");
// Normal swprintf : all string are unicode
swprinf( szW , "%s" , L" Unicode str ");
// Convert ANSI String to Unicode
swprinf( szW, L"%S" , "ANSI str");
int MultiByteToWideChar( 鍙互閫氳繃涓嬪垪姝ラ灝嗗瀛楄妭瀛楃涓茶漿鎹㈡垚U n i c o d e絳変環瀛楃涓詫細 int WideCharToMultiByte( 鏈枃杞嚜錛?a style="text-decoration: none; color: #336d89; ">http://hi.baidu.com/%C6%DF%D4%C2%BA%A3%C0%B6/blog/item/65639b25cc31f16234a80fc4.html
UINT uCodePage, //co
DWORD dwFlags, //character-type options, 0
PCSTR pMultiByte, //source string Addr
int cchMultiByte, //source string byte length
PWSTR pWideCharStr, //Dest string Addr
int cchWideChar //Dest string char Nums
)
u C o d e P a g e鍙傛暟鐢ㄤ簬鏍囪瘑涓涓笌澶氬瓧鑺傚瓧絎︿覆鐩稿叧鐨勪唬鐮侀〉鍙楓俤 w F l a g s鍙傛暟鐢ㄤ簬璁懼畾鍙︿竴涓帶浠訛紝瀹冨彲浠ョ敤閲嶉煶絎﹀彿涔嬬被鐨勫尯鍒嗘爣璁版潵褰卞搷瀛楃銆傝繖浜涙爣蹇楅氬父騫朵笉浣跨敤錛屽湪d w F l a g s鍙傛暟涓紶閫?銆俻 M u l t i B y t e S t r鍙傛暟鐢ㄤ簬璁懼畾瑕佽漿鎹㈢殑瀛楃涓詫紝 c c h M u l t i B y t e鍙傛暟鐢ㄤ簬鎸囨槑璇ュ瓧絎︿覆鐨勯暱搴︼紙鎸夊瓧鑺傝綆楋級銆傚鏋滀負c c h M u l t i B y t e鍙傛暟浼犻? 1錛岄偅涔堣鍑芥暟鐢ㄤ簬紜畾婧愬瓧絎︿覆鐨勯暱搴︺傝漿鎹㈠悗浜х敓鐨刄 n i c o d e鐗堟湰瀛楃涓插皢琚啓鍏ュ唴瀛樹腑鐨勭紦瀛橈紝鍏跺湴鍧鐢眕 Wi d e C h a r S t r鍙傛暟鎸囧畾銆傚繀欏誨湪c c h Wi d e C h a r鍙傛暟涓瀹氳緙撳瓨鐨勬渶澶у鹼紙浠ュ瓧絎︿負璁¢噺鍗曚綅錛夈傚鏋滆皟鐢∕ u l t i B y t e To Wi d e C h a r錛岀粰c c h Wi d e C h a r鍙傛暟浼犻?錛岄偅涔堣鍙傛暟灝嗕笉鎵ц瀛楃涓茬殑杞崲錛岃屾槸榪斿洖涓轟嬌杞崲鍙栧緱鎴愬姛鎵闇瑕佺殑緙撳瓨鐨勫箋?/p>
1) 璋冪敤M u l t i B y t e To Wi d e C h a r鍑芥暟錛屼負p Wi d e C h a r S t r鍙傛暟浼犻扤 U L L錛屼負c c h Wi d e C h a r鍙傛暟浼犻?銆?br /> 2) 鍒嗛厤瓚沖鐨勫唴瀛樺潡錛岀敤浜庡瓨鏀捐漿鎹㈠悗鐨刄 n i c o d e瀛楃涓層傝鍐呭瓨鍧楃殑澶у皬鐢卞墠闈㈠M u l t B y t e To Wi d e C h a r鐨勮皟鐢ㄨ繑鍥炪?br /> 3) 鍐嶆璋冪敤M u l t i B y t e To Wi d e C h a r錛岃繖嬈″皢緙撳瓨鐨勫湴鍧浣滀負p Wi d e C h a r S t r鍙傛暟鏉ヤ紶閫掞紝騫朵紶閫掔涓嬈¤皟鐢∕ u l t i B y t e To Wi d e C h a r鏃惰繑鍥炵殑緙撳瓨澶у皬錛屼綔涓篶 c h Wi d e c h a r鍙傛暟銆?br /> 4) 浣跨敤杞崲鍚庣殑瀛楃涓層?br /> 5) 閲婃斁U n i c o d e瀛楃涓插崰鐢ㄧ殑鍐呭瓨鍧椼?/p>
UINT CodePage, // co
DWORD dwFlags, // performance and mapping flags
LPCWSTR lpWideCharStr, // wide-character string
int cchWideChar, // number of chars in string
LPSTR lpMultiByteStr, // buffer for new string
int cbMultiByte, // size of buffer
LPCSTR lpDefaultChar, // default for unmappable chars
LPBOOL lpUsedDefaultChar // set when default char used
)
]]>