1.----->單字節字符集,稱之爲SBCS,它的所有字符都只有一個字節的長度。常見字符集有:ASCII碼和擴展ASCII碼。SBCS字符串由一個零字節結尾,數據類型是char。
2.------>多字節字符集(MBCS)
3.------->寬字符集(Unicode字符集)
const char * p = "Hello"; // 使用 ASCII 字符集
const char * p = "你好"; // 使用 MBCS 字符集,由於 MBCS 完全兼容 ASCII,多數情況下,我們並不嚴格區分他們
LPCSTR p = "Hello,你好"; // 意義同上
const WCHAR * p = L"Hello,你好"; // 使用 UNICODE 字符集(L用來定義UNICODE字符串,L就是轉換成寬字符)
LPCOLESTR p = L"Hello,你好"; // 意義同上
const TCHAR * p = _T("Hello,你好"); // 如果預定義了_UNICODE,則表示使用UNICODE字符集;如果定義了_MBCS,則表示使用
LPCTSTR p = _T("Hello,你好"); // 意義同上
在上面的例子中,T是非常有意思的一個符號(TCHAR、LPCTSTR、LPTSTR、_T()、TEXT()、_TEXT()...),它表示使用一種中間類型,既不明確表示使用 MBCS,也不明確表示使用 UNICODE。那到底使用哪種字符集那?嘿嘿...編譯的時候決定吧。設置條件編譯的方式是:VC6中,"Project\Settings...\C/C++卡片 Preprocessor definitions" 中添加或修改_MBCS、_UNICODE。爲了程序的可移植性,建議使用T類型!
CString::GetLength()獲得字節數的正確方法
CString str("abc我");
DWORD le0 = str.GetLength() * sizeof(TCHAR);
// 這種用法在MBCS環境下可以省略。在Unicode下,所有字符(包括ascii及中文字符), 每個字符都被定義爲WHAR, 即雙字節Unicode字符。該方法也正確。