字元編碼主要分兩種: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的官方資料
字元編碼問題
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...