在我們編寫程序的時候,使用最多的是字符串的處理,而ANSI和UNICODE的相互轉換經常搞的我們頭暈眼亂。
應該說UNICODE是一種比較好的編碼方式,在我們的程序中應該儘量使用UNICODE編碼方式,我們在編寫程序的時候,最好能依據下面的準則來進行:
基本準則:
1.將文本字符串想象爲字符數組,而非char或字節數組
2.開始使用通用數據類型來表示文本字符和字符串(如TCHAR,PTSTR)
原因是我們可以在WinNT.h的頭文件中找到如下定義(代碼有刪改):
3.用明確的數據類型來表示字節,字節指針和數據緩衝區(如BYTE, PBYTE)原因如上同
4.使用TEXT或是_T來表示字面量字符和字符串(這兩個宏會根據你自己設置的字符集屬性,動態轉換成相應的字符集)
5.執行全局替換,原因同2.
6.修改與字符串有關的計算。如有些函數需要我們傳入緩衝區大小的字符數,這個時候就需要_countof(szBuffer),而不是sizeof(szBuffer);
有些時候我們需要爲一個字符串分配內存,那麼內存是使用字節數來分配的,這個時候我們就需要使用malloc(nCharacters*sizeof(TCHAR)),而不是使用malloc(nCharacters).
我們可以使用如下樣式的宏來處理這個問題:
7.儘量避免使用printf系列的函數,尤其是有%s,%S字段類型來進行ANSI和Unicode字符串之間的相互轉換。正確的做法是使用MultiByteToWideChar和WideCharToMultiByte函數
8.對於UNICODE和_UNICODE,要麼都定義,要麼都不要用,因爲VS會在我們創建項目的時候默認定義_UNICODE。
9.使用安全的字符串函數,如後綴爲_s的函數或是前綴爲StringCch的函數,後者會截斷字符串。前者需指定字符串長度。
10.使用/GS 和/RTCS編譯器選項來自動檢測緩衝區溢出。
使用UNICODE編碼規範是一種好的編程習慣,但是,有的時候,我們不得不使用ANSI編碼方式,這種情況該如何處理呢?
請看下集UNICODE和ANSI字符串的轉換
同系列文章參看:
多字符集(ANSI)和UNICODE及字符串處理方式準則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.