在VC60下,默認方式下創建的是ANSI編碼的工程(注:編譯的exe內部,其資源字符是以UNICODE保存),創建UNICODE編碼工程的方法:程序員
一、爲工程添加UNICODE和_UNICODE預處理選項。
具體步驟:打開[工程]->[設置…]對話框,在C/C++標籤對話框的「預處理程序定義」中去除_MBCS,加上_UNICODE,UNICODE。(注意中間用逗號隔開)。函數
在沒有定義UNICODE和_UNICODE前,全部函數和類型都默認使用ANSI的版本;在定義了UNICODE和_UNICODE以後,全部的MFC類和Windows API都變成了寬字節版本了。字體
二、設置程序入口點編碼
由於MFC應用程序有針對Unicode專用的程序入口點,咱們要設置entry point。不然就會出現鏈接錯誤。code
設置entry point的方法是:打開[工程]->[設置…]對話框,在Link頁的Category:Output類別的Entry Point裏填上wWinMainCRTStartup。資源
一、用THCAR代替char字符串
二、字符串加_T(""),如_T("你好")編譯
三、用_tcscpy等代替strcpy等程序
ANSI操做函數以str開頭,如strcpy(),strcat(),strlen();方法
Unicode操做函數以wcs開頭,如wcscpy,wcscpy(),wcslen();
ANSI/Unicode互爲兼容的操做函數以_tcs開頭 _tcscpy(C運行期庫);
ANSI/Unicode互爲兼容的操做函數以lstr開頭 lstrcpy(Windows函數);
考慮ANSI和Unicode的兼容,咱們須要使用以_tcs開頭或lstr開頭的通用字符串操做函數。
這樣,你在ANSI/UNICODE環境下編譯時,能夠不修改代碼。
一、在ANSI下,若是程序自己產生的字符(串),如在代碼中直接賦值的CString str = _T("你好"),不須要轉換,可是,字符(串)是從其它地方來的,如讀取UNICODE編碼的文件,通訊接收的UNICODE數據,則須要轉換,轉換使用上面兩個函數。
二、同理,在UNICODE下,若是程序自己產生的字符(串),如在代碼中直接賦值的CString str = _T("你好"),不須要轉換,可是,字符(串)是從其它地方來的,如讀取ANSI編碼的文件,通訊接收的ANSI數據,則須要轉換,轉換使用上面兩個函數。
三、無論是ANSI,仍是UNICODE,在資源中的字符串,如String Table中的、對話框的靜態文本,都不須要轉換,由於它們編譯後是以UNICODE保存在.exe中的。
對話框上的漢字,只要是簡繁同形的,同一個.exe運行在簡體Windows和繁體Windows下均可以正常顯示,固然二者必需要有對應的字體(庫),都用System字體是能夠的,或者簡體Windows下用「宋體」,繁體Windows下用「新細明體」。簡體的「中」和繁體的「中」字體相同,是簡繁同形,簡體的「國」和繁體的「國」字形不一樣,是簡繁異形。
四、另外,同一個字符串在ANSI和UNICODE下計數個數不一樣。如「123你好」,在ANSI下是7個字符,在UNICODE下是5個字符。使用CString 的.GetLength()時要特別注意。