【原創】MBCS,Unicode,UTF8以及一個用C++讀寫UTF8檔案的工具類

來源:互聯網
上載者:User
    其他的沒什麼好說的,直接看代碼即可,唯一一個需要說明的是,C++中常用的三種字元編碼:MBCS,Unicode,UTF8,新手一般會在這個問題上犯糊塗。
    MBCS是變長位元組編碼,具體的編碼由作業系統確定,實際上是作業系統的內碼。如在簡體中文作業系統中,其編碼是GB18030(GB2312的超集);在繁體中文作業系統中,其編碼是BIG5。對於GB18030,其英文字元編碼與ASCII碼值相同,用單位元組編碼,中文字元則用雙位元組編碼,其值為字元對應的區位碼值。
    Unicode是雙位元組編碼。其英文字元編碼也與ASCII碼值相同。不同之處在於,即使英文字元也用雙位元組表示,其第一個位元組值為0,第二個位元組為對應的ASCII碼值。對於漢字,與GB18030的不同之處在於,相同漢字的編碼值不同,不是漢字的區位碼值,而是Unicode編碼值。
    UTF8也是變長位元組編碼。其英文字元編碼也與ASCII碼值相同,但只用一個位元組編碼;對於漢字等字元,則用三個位元組編碼。UTF-8編碼的最大長度是4個位元組。

    從以上的說明可以看出,儲存一個相同的中英文混合的文字檔,MBCS和UTF8編碼的檔案要比Unicode編碼的檔案小,這是因為前兩者對英文字元都使用單位元組編碼,更節省空間的緣故。實驗中還發現,MBCS比UTF8檔案的大小要稍小,這是因為UTF8儲存漢字需要更多位元組的緣故。
    在電腦對這三種文字編碼的處理效率上,Unicode編碼要比MBCS和UTF8編碼的效率高。這是因為Unicode是定長編碼,在處理過程中不需要判斷下一個字元的開始位置,因而處理效率高。在C++中,如果開啟Unicode編碼,則程式中的所有字元就是Unicode編碼。如果需要儲存為UTF8編碼,必須手工處理。
    附件是C++中讀寫UTF8檔案的工具類。想當初我在互連網上到處尋找讀寫UTF8的C++方法,遍尋不得,希望能夠給後來人給予協助。附件中的CDirectory類是我在項目中使用的檔案夾操作函數。

    代碼下載

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.