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