C++ 與 字元編碼格式

來源:互聯網
上載者:User

ASCII碼是表示字元的基本編碼,由於它是8位位元組編碼,只能表示256個字元。事實上在早期,ASCII是7位,英文的主要字元都小於128,後來擴充到8位,用大於128的編碼錶示特殊圖形標記。當電腦進入中國後,面臨漢字表示的問題,漢字的數目遠大於256,於是中國制訂GB2312編碼。GB2312是一個相容7位ASCII的變長位元組編碼格式。所謂變長是指英文字元仍然使用單位元組表示,而中文使用雙位元組表示,這樣在一段中英文混排的文字當中,就有兩種不同的字元位元組長度。(這種方式給中英文字元處理帶來很多麻煩,比如要統計一段文本的字元數,對於英文來說就是文本的位元組長度,而對中英文混排就必須用專門的演算法一個一個的統計)。那麼GB2312如何區分英文,中文呢?GB2312隻相容7位ASCII編碼,不能表示大於128的特殊圖形標記。這樣英文字元都小於128。而中文則採用大於128的兩個位元組表示,就不會發生衝突了。當遇到一個小於128的位元組時,那就是一個英文字元,當大於128時,就將當前位元組以及其後跟隨的位元組看做一個整體,就是一個中文字元。目前在中文環境下VC中預設使用的編碼方式就是GB2312以及擴充編碼。GB2312的問題是只能局限於簡體中文環境下使用。國際上後來制訂了GBK編碼,可以同時支援中、日、韓編碼,屬於局限於東亞的地區性編碼。隨著電腦普及,人們越來越需要同時表示多種語言字元。國際上制訂了Unicode編碼通訊協定,它能同時表達中文、日文、韓文、東西歐、英文等幾乎所有文字。Unicode主要分為UTF-32,UTF-16,UTF-8等類型。其中UTF-32是等長編碼,每個字元都用32位4位元組表示,但這樣帶來很大的空間浪費。UTF-16,UTF-8實際上是對UTF-32的改進壓縮編碼,屬變長編碼。特別是UTF-8是目前國際上應用最廣泛的編碼格式,最新的軟體開發都應當以UTF-8為基礎,以便支援多語言和國際化應用。一般來說,軟體中的文本分為程式文本和使用者文本,比如在記事本軟體中,菜單和提示框裡面的文字都是在軟體開發過程中就已經確定的,就是程式文本;使用者文本是使用者輸入的資料,比如記事本中用書寫的文章內容。使用者文本是使用者使用軟體時通過特定的IME來輸入,開發人員只需要將其儲存為特定的編碼格式就行了。而程式文本是開發人員要關注的。目前的流行做法是,不推薦將文本以printf(“中文字元!n”);這樣的形式直接寫到代碼中,因為這樣以後要更改常值內容,或者支援其他語言提示時,要在整個代碼中去修改這些字串,不便於維護(有個項目,曾動用4名開發人員2周的時間,才把全部中文串替換成英文)。正常的做法是,將這些字串集中儲存在一個文字檔或其他類型資源檔中,需要輸出提示時,通過字串id的方式找到並載入對應的文本,然後再輸出。這樣每次支援新的語言時,只要提供一個新的語言資源檔就可以了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.