【Windows程序设计】Unicode简介
- 字符的發(fā)展史
1、最初的字符集ASCII碼,128個(gè)字符。
2、擴(kuò)展ASCII碼,共有256個(gè)字符。
3、雙字節(jié)字符集(DBCS:double-byte character set)。DBCS從256編碼開(kāi)始,最初的128個(gè)代碼是ASCII,較高的128個(gè)代碼中的某些總是跟隨著第二個(gè)字節(jié)。這兩個(gè)字節(jié)一起(稱(chēng)作首字節(jié)和跟隨字節(jié))定義一個(gè)字符,通常是一個(gè)復(fù)雜的象形文字。雙字符集問(wèn)題并不是說(shuō)字符由兩個(gè)字節(jié)代表。問(wèn)題在于一些字符(特別是ASCII字符)由1個(gè)字節(jié)表示,而另一些字符由兩個(gè)字節(jié)表示。
4、Unicode編碼中每個(gè)字符占用16個(gè)字節(jié),它是一套全球化的編碼方案,包括世界上所有的象形符號(hào)。然而Unicode編碼的問(wèn)題在于每個(gè)字符占用兩個(gè)字節(jié)的空間在某些情況下非常浪費(fèi)。
因此,有些時(shí)候我們希望維護(hù)統(tǒng)一的原始程序,它能根據(jù)某項(xiàng)標(biāo)識(shí)進(jìn)行ASCII碼編譯,也能進(jìn)行Unicode碼編譯。在windows編程中,提供了TCHAR.H頭文件,它為我們提供了這項(xiàng)功能。
- 寬字符
ANSI C支持8位的character集,也支持16位的寬字符集。寬字符集并不是unicode,unicode是一種寬字符集。
在C語(yǔ)言中,有如下的幾種定義字符的方式,它們需要的存儲(chǔ)空間如下所示:
char c = 'A'; ? ? //c需要一個(gè)字節(jié)的存儲(chǔ)單元。
wchar_t c = 'A'; ? ?//c需要兩個(gè)字節(jié)的存儲(chǔ)單元
wchar_t * p = L"Hello!"; ?//p需要四個(gè)字節(jié)的存儲(chǔ)單元,L告訴編譯器字符串按寬字符集保存,占14個(gè)字節(jié)存儲(chǔ),其中包含6個(gè)寬字符,和1個(gè)2位的0字符
針對(duì)寬字符的庫(kù)函數(shù)示例:
char * pc = "Hello!";
iLength = strlen(pc); ? ?//可知iLength等于6
wchar_t * pw = L"Hello!";
iLength = wcslen(pw); ? //iLength等于6
- 寬字符與Windows
若想明確定義8位字符變量和字符串,使用CHAR, PCHAR;
若想明確定義16位字符變量和字符串,使用WCHAR, PWCHAR,并使用L標(biāo)識(shí)字符串;
對(duì)于使用8位還是16位字符,取決于UNICODE標(biāo)識(shí)符的定義,此時(shí)字符變量和字符串的定義使用TCHAR, PTCHAR,以及TEXT宏。
轉(zhuǎn)載于:https://www.cnblogs.com/qi09/archive/2012/03/01/2362006.html
總結(jié)
以上是生活随笔為你收集整理的【Windows程序设计】Unicode简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java中的IO整理完整版
- 下一篇: ASP.NET MVC3 + Ninje