UNICODE
計算機發明後,爲了在計算機中表示字符,人們制定了一種編碼,叫ASCII碼。ASCII碼由一個字節中的7位(bit)表示,範圍是0x00 - 0x7F 共128個字符。他們以爲這128個數字就足夠表示abcd....ABCD....1234 這些字符了。
咳......說英語的人就是“笨”!後來他們突然發現,如果需要按照表格方式打印這些字符的時候,缺少了“製表符”。於是又擴展了ASCII的定義,使用一個字節的全部8位(bit)來表示字符了,這就叫擴展ASCII碼。範圍是0x00 - 0xFF 共256個字符。
咳......說中文的人就是聰明!中國人利用連續2個擴展ASCII碼的擴展區域(0xA0以後)來表示一個漢字,該方法的標準叫GB-2312。後來,日文、韓文、阿拉伯文、臺灣繁體(BIG-5)......都使用類似的方法擴展了本地字符集的定義,現在統一稱爲 MBCS 字符集(多字節字符集)。這個方法是有缺陷的,因爲各個國家地區定義的字符集有交集,因此使用GB-2312的軟件,就不能在BIG-5的環境下運行(顯示亂碼),反之亦然。
咳......說英語的人終於變“聰明”一些了。爲了把全世界人民所有的所有的文字符號都統一進行編碼,於是制定了UNICODE標準字符集。UNICODE 使用2個字節表示一個字符(unsigned shor int、WCHAR、_wchar_t、OLECHAR)。這下終於好啦,全世界任何一個地區的軟件,可以不用修改地就能在另一個地區運行了。雖然我用 IE 瀏覽日本網站,顯示出我不認識的日文文字,但至少不會是亂碼了。UNICODE 的範圍是 0x0000 - 0xFFFF 共6萬多個字符,其中光漢字就佔用了4萬多個。嘿嘿,中國人賺大發了:0)
在程序中使用各種字符集的方法:
const char * p = "Hello"; // 使用 ASCII 字符集
const char * p = "你好"; // 使用 MBCS 字符集,由於 MBCS 完全兼容 ASCII,多數情況下,我們並不嚴格區分他們
LPCSTR p = "Hello,你好"; // 意義同上
const WCHAR * p = L"Hello,你好"; // 使用 UNICODE 字符集
LPCOLESTR p = L"Hello,你好"; // 意義同上
// 如果預定義了_UNICODE,則表示使用UNICODE字符集;如果定義了_MBCS,則表示使用 MBCS
const TCHAR * p = _T("Hello,你好");
LPCTSTR p = _T("Hello,你好"); // 意義同上
在上面的例子中,T是非常有意思的一個符號(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一種中間類型,既不明確表示使用 MBCS,也不明確表示使用 UNICODE。那到底使用哪種字符集那?嘿嘿......編譯的時候決定吧。設置條件編譯的方式是:VC6中,"Project/Settings.../C/C++卡片 Preprocessor definitions" 中添加或修改 _MBCS、_UNICODE;VC.NET中,"項目/屬性/配置屬性/常規/字符集"然後用組合窗進行選擇。使用 T 類型,是非常好的習慣,嚴重推薦!
UNICODE
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.