在 《winhack的開發技術經驗(1)-使用 unicode 作為內部字串處理》
裡面講到了應該使用unicode作為程式裡字串編碼, 本文進一步講如何使用和轉換編碼。
字元編碼的使用
字元編碼主要分兩種:mbcs以及 unicode。 以 c/cc++ 為例,以 char 為單位的陣列使用mbcs編碼(如 ascii,gb2312,big5),以wchar_t 為單位的陣列使用unicode作為編碼。
比如你的程式中使用:
char sztitle = "窗體標題「;
此時,sztitle字串使用的的是mbcs編碼,如果使用者的作業系統不是中文的windows,你的程式將無法正常顯示!
所以,要換成unicode方式:
wchar_t sztitle = l"窗體標題";
此時,sztitle字串使用的的是unicode編碼,加入你的程式以unicode方式編譯,在任何語言的windows上都能顯示正常。
字元編碼的轉換
有時候你從外部檔案讀進來的字串是mbcs編碼(如gb2312),而你程式裡面都是統一用unicode處理字串,這時候要進行字元編碼轉換。 windows為我們提供了很好用的api函式 multibytetowidechar 和 widechartomultibyte 幫我們輕鬆實現轉換。 **如下:
gb2312 轉換成 unicode:
code:
[copy to clipboard]
wchar_t* gb2312tounicode(const char* szgbstring)
big5 轉換成 unicode:
code:
[copy to clipboard]
wchar_t* big5tounicode(const char* szbig5string)
unicode 轉換成 gb2312:
code:
[copy to clipboard]
char* unicodetogb2312(const wchar_t* szunicodestring)
unicode 轉換成 big5:
code:
[copy to clipboard]
char* unicodetobig5(const wchar_t* szunicodestring)
繁體和簡體的相互轉換
利用unicode作為媒介,還可以做出很有意思的應用。在處理中文過程中,乙個經常用到的功能就是繁體和簡體的互相轉換。 **如下:
正體中文big5 轉換成 簡體中文 gb2312
code:
[copy to clipboard]
char* big5togb2312(const char* szbig5string)
簡體中文 gb2312 轉換成 正體中文big5
code:
[copy to clipboard]
char* gb2312tobig5(const char* szgbstring)
文字檔案讀寫的編碼問題
當你的程式讀乙個文字檔案時,如何判斷檔案中的字元是mbcs格式還是unicode格式? windows定義了乙個"位元組順序標記"(byte-order mark)的概念:當乙個txt檔案的前2個位元組為ff fe時,這個檔案裡面的字元採用unicode編碼, 如果沒有位元組順序標記,就是mbcs編碼。更多關於位元組順序標記的說明,請看 msdn的官方資料
字元編碼的使用和轉換
字元編碼的使用 字元編碼主要分兩種 mbcs以及 unicode。以 c cc 為例,以 char 為單位的陣列使用mbcs編碼 如 ascii,gb2312,big5 以wchar t 為單位的陣列使用unicode作為編碼。比如你的程式中使用 char sztitle 窗體標題 此時,sztit...
字元編碼的使用和轉換
字元編碼的使用 字元編碼主要分兩種 mbcs以及 unicode。以 c cc 為例,以 char 為單位的陣列使用mbcs編碼 如 ascii,gb2312,big5 以wchar t 為單位的陣列使用unicode作為編碼。比如你的程式中使用 char sztitle 窗體標題 此時,sztit...
字元編碼的轉換
編碼轉換是指將一種編碼轉成另一種編碼,比如utf 8轉成gbk。為什麼需要編碼轉換?因為不同作業系統編碼不同,utf 8在win上沒法直接看,因為windows是gbk編碼的,需要轉成gbk才行。如果你的bgk字元想在linux mac上正常顯示,就得轉成utf 8.s 小明 在python3中,記...