ASCII字符表:
擴(kuò)展ASCII字符表:

(注:要在console窗口打印查看擴(kuò)展ASCII字符表,請先設(shè)置代碼頁為437.(SetConsoleOutputCP(437)))
計算機(jī)發(fā)明后,為了在計算機(jī)中表示字符,人們制定了一種編碼,叫ASCII碼。ASCII碼由一個字節(jié)中的7位(bit)表示,范圍是0x00 - 0x7F 共128個字符。他們以為這128個數(shù)字就足夠表示abcd....ABCD....1234 這些字符了。
咳......說英語的人就是“笨”!后來他們突然發(fā)現(xiàn),如果需要按照表格方式打印這些字符的時候,缺少了“制表符”。于是又?jǐn)U展了ASCII的定義,使用一個字節(jié)的全部8位(bit)來表示字符了,這就叫擴(kuò)展ASCII碼。范圍是0x00 - 0xFF 共256個字符。
咳......說中文的人就是聰明!中國人利用連續(xù)2個擴(kuò)展ASCII碼的擴(kuò)展區(qū)域(0xA0以后)來表示一個漢字,該方法的標(biāo)準(zhǔn)叫GB-2312。后來,日文、韓文、阿拉伯文、臺灣繁體(BIG-5)......都使用類似的方法擴(kuò)展了本地字符集的定義,現(xiàn)在統(tǒng)一稱為 MBCS 字符集(多字節(jié)字符集)。這個方法是有缺陷的,因為各個國家地區(qū)定義的字符集有交集,因此使用GB-2312的軟件,就不能在BIG-5的環(huán)境下運行(顯示亂碼),反之亦然。
咳......說英語的人終于變“聰明”一些了。為了把全世界人民所有的所有的文字符號都統(tǒng)一進(jìn)行編碼,于是制定了UNICODE標(biāo)準(zhǔn)字符集。UNICODE 使用2個字節(jié)表示一個字符(unsigned shor int、WCHAR、_wchar_t、OLECHAR)。這下終于好啦,全世界任何一個地區(qū)的軟件,可以不用修改地就能在另一個地區(qū)運行了。雖然我用 IE 瀏覽日本網(wǎng)站,顯示出我不認(rèn)識的日文文字,但至少不會是亂碼了。UNICODE 的范圍是 0x0000 - 0xFFFF 共6萬多個字符,其中光漢字就占用了4萬多個。嘿嘿,中國人賺大發(fā)了:0)
在程序中使用各種字符集的方法:
const char * p = "Hello"; // 使用 ASCII 字符集
const char * p = "你好"; // 使用 MBCS 字符集,由于 MBCS 完全兼容 ASCII,多數(shù)情況下,我們并不嚴(yán)格區(qū)分他們
LPCSTR p = "Hello,你好"; // 意義同上
const WCHAR * p = L"Hello,你好"; // 使用 UNICODE 字符集
LPCOLESTR p = L"Hello,你好"; // 意義同上
// 如果預(yù)定義了_UNICODE,則表示使用UNICODE字符集;如果定義了_MBCS,則表示使用 MBCS
const TCHAR * p = _T("Hello,你好");
LPCTSTR p = _T("Hello,你好"); // 意義同上 在上面的例子中,T是非常有意思的一個符號(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一種中間類型,既不明確表示使用 MBCS,也不明確表示使用 UNICODE。那到底使用哪種字符集那?嘿嘿......編譯的時候決定吧。設(shè)置條件編譯的方式是:VC6中,"Project\Settings...\C/C++卡片 Preprocessor definitions" 中添加或修改 _MBCS、_UNICODE;VC.NET中,"項目\屬性\配置屬性\常規(guī)\字符集"然后用組合窗進(jìn)行選擇。使用 T 類型,是非常好的習(xí)慣,嚴(yán)重推薦!



