程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> ANSI和UNICODE編程的注意事項

ANSI和UNICODE編程的注意事項

編輯:C++入門知識

建立UNICODE編碼工程

    在VC60下,默認方式下建立的是ANSI編碼的工程(注:編譯的exe內部,其資源字符是以UNICODE保存),建立UNICODE編碼工程的方法:

1、為工程添加UNICODE和_UNICODE預處理選項。
  
  具體步驟:打開[工程]->[設置…]對話框,在C/C++標簽對話框的“預處理程序定義”中去除_MBCS,加上_UNICODE,UNICODE。(注意中間用逗號隔開)。

  在沒有定義UNICODE和_UNICODE前,所有函數和類型都默認使用ANSI的版本;在定義了UNICODE和_UNICODE之後,所有的MFC類和Windows API都變成了寬字節版本了。

2、設置程序入口點

  因為MFC應用程序有針對Unicode專用的程序入口點,我們要設置entry point。否則就會出現連接錯誤。

  設置entry point的方法是:打開[工程]->[設置…]對話框,在Link頁的Category:Output類別的Entry Point裡填上wWinMainCRTStartup。

程序員的幾個注意事項

1、用THCAR代替char

2、字符串加_T(""),如_T("你好")

3、用_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/UNICODE下的字符轉換和其它

    1、在ANSI下,如果程序本身產生的字符(串),如在代碼中直接賦值的CString str = _T("你好"),不需要轉換,但是,字符(串)是從其它地方來的,如讀取UNICODE編碼的文件,通信接收的UNICODE數據,則需要轉換,轉換使用上面兩個函數。

    2、同理,在UNICODE下,如果程序本身產生的字符(串),如在代碼中直接賦值的CString str = _T("你好"),不需要轉換,但是,字符(串)是從其它地方來的,如讀取ANSI編碼的文件,通信接收的ANSI數據,則需要轉換,轉換使用上面兩個函數。

    3、不管是ANSI,還是UNICODE,在資源中的字符串,如String Table中的、對話框的靜態文本,都不需要轉換,因為它們編譯後是以UNICODE保存在.exe中的。

    對話框上的漢字,只要是簡繁同形的,同一個.exe運行在簡體Windows和繁體Windows下都可以正常顯示,當然兩者必須要有對應的字體(庫),都用System字體是可以的,或者簡體Windows下用“宋體”,繁體Windows下用“新細明體”。簡體的“中”和繁體的“中”字體相同,是簡繁同形,簡體的“國”和繁體的“國”字形不同,是簡繁異形。

    4、另外,同一個字符串在ANSI和UNICODE下計數個數不同。如“123你好”,在ANSI下是7個字符,在UNICODE下是5個字符。使用CString 的.GetLength()時要特別注意。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved