字元編碼的使用和轉換

2021-04-07 09:11:06 字數 1774 閱讀 3497

在 《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中,記...