字元編碼問題

2021-04-20 06:28:20 字數 1718 閱讀 2228

字元編碼主要分兩種: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函式multibytetowidecharwidechartomultibyte幫我們輕鬆實現轉換。  **如下: 

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的官方資料

字元編碼問題

utf 8 1.單位元組的字元,位元組的第一位設為0,對於英語文字,utf 8碼只占用乙個位元組,和ascii碼完全相同 2.n個位元組的字元 n 1 第乙個位元組的前n位設為1,第n 1位設為0,後面位元組的前兩位都設為10,這n個位元組的其餘空位填充該字元unicode碼,高位用0補足。除了格式...

字元編碼問題

關鍵字 編碼集 bstr lpstr lpcstr lpwstr lpcwstr lptstr lpctstr cstring 1 編碼集 1 ascii編碼集 單位元組00h 7fh範圍 最高位為0 2 擴充套件ascii編碼 單位元組80h ffh範圍 最高位為1 3 gb2312 採用兩個位元...

字元編碼問題

階段一 ascii碼 計算機剛開始只支援英語,其它語言不能夠在計算機上儲存和顯示。ascii碼一共規定了128個字元的編碼,這128個符號 包括32個不能列印出來的控制符號 只占用了乙個位元組的後面7位,最前面的1位統一規定為0。階段二 ansi編碼 本地編碼 為使計算機支援更多語言,通常使用0x8...