1. 程式人生 > >關於VC多位元組字符集和unicode寬字符集的使用和問題,只有明白了其中的原理,才能靈活解決問題

關於VC多位元組字符集和unicode寬字符集的使用和問題,只有明白了其中的原理,才能靈活解決問題

VC在建一個新的專案時,都是預設Unicode字符集。

字符集不僅涉及編碼,還涉及字元位元組的物理儲存方式,常常成為寬字元unicode字符集和窄字元(gb2312)多位元組字符集

UTF-8:   1~3位元組可變 UNICODE: 2位元組一個字元  單個字元寬度固定。 GB2312:  中文2位元組一個字元,字母等1個位元組,為多位元組字符集。位寬動態變化 例子: “你”字的UTF-8編碼: E4 BD A0        11100100 10111101 10100000 “你”的Unicode編碼: 4F 60            01001111 01100000 按照UTF-8的編碼規則,分解如下:xxxx0100 xx111101 xx100000

只要都加了_T("xxxxxxxx")巨集,及字串宣告處理函式等都用_T或W頭的函式,

如:wsprintf,TCHAR,_tcsrchr,_tcslen。

如果只是單個程式不和其他程式互動,資訊顯示是沒有問題的。

編譯時,巨集轉換會自動轉換為系統設定的寬字元(unicode)或多位元組字元。

唯一存在的問題就是當一個已經存在的軟體系統和我們這個新系統字串資料通訊時,會發生問題。

如果你不把字串顯示出來,只是儲存或者轉發。好像問題不大。

但一旦要連線字串或者顯示出來,這就很重要了。

一定要搞明白,傳輸過來的字串是什麼字符集儲存的。

然後轉換成當前的字符集儲存方式。

如果不想手工編碼轉換,那就把工程的字符集和傳過來的系統的字符集調整成一直的字符集。

如果你寫一個控制檯程式傳送到服務端的回射程式。服務端列印輸入的控制檯字元。

控制檯程式輸入問題是,即使你寫的控制檯程式專案設定成unicode。他的輸入好像預設只是多位元組字符集。因為控制的輸入處理是整合在windows系統中的。windows系統控制檯輸入是多位元組字符集的。

如果你的服務端接收並列印控制檯輸入的字元,那服務端也設定成多位元組字符集,否則就要手工編碼從把接收到的多位元組轉換到unicode寬字元。否則就會是亂碼了。