字符編碼

ANSI多字節編碼:

ASCII:美國信息交換標準代碼,早期計算使用的字符編碼;特點:一個字母或符號只需要一個字節存儲;

ANSI:美國國家標準學會,主要是應對多國家本地化文字的問題;特點:多字節編碼方式,系統裏的英文和符號就使用單字節的 ASCII(0x00~0x7f),而對於漢字之類的本地化字符編碼,就採用 0x80~0xFF 範圍內的多個字節來表示,這樣既能兼容 ASCII ,又能正常使用本地化語言文字。對於大陸國標碼已經發展了好幾代,一般對簡體中文的文本選擇 GBK 或 GB18030 編碼都是可以正常顯示的。

Unicode系列編碼:

Unicode編碼主要是爲了解決ANSI編碼中0x80~0xff中各國本地化語言各自爲戰,沒有統一的標準,造成多國語言的衝突;Unicode字符編碼是對全球語言統一分配編碼區間,各種語言字符互相不衝突,都可以兼容使用;

  1. Unicode 編碼系統,可分爲編碼方式和實現方式兩個層次。所謂編碼方式就是採用幾個字節表示一個字符。其中UTF-8是靈活的變長編碼,對於 ASCII 使用一個字節編碼,其他本地化語言文字用多個字節編碼,最長可以到 6 個字節編碼一個字符。
  2. UTF-16:兼容 UCS-2,一般都是兩字節表示一個字符,對於超出兩字節的國際碼字符,使用一對兩字節來表示。在存儲時,按兩個字節的排布順 序,可以分爲 UTF-16LE(Little Endian,小端字節序)和UTF-16BE(Big Endian,大端字節序),微軟所說的 Unicode 默認就是 UTF-16LE。
  3. UTF-32:同 UCS-4,因爲用四個字節表示一個字符,所以不需要考慮擴展了。這種編碼方式簡單,但也特別浪費空間,

在 C++ 中,以前通常使用 char 表示單字節的字符,使用 wchar_t 表示寬字符,對國際碼提供一定程度的支持。 char * 字符串有專門的封裝類 std::string 來處理,標準輸入輸出流是 std::cin 和 std::cout 。對於 wchar_t * 字符串,其封裝類是 std::wstring,標準輸入輸出流是 wcin 和 wcout。
        Windows 系統裏的寬字符是兩個字節,就是 UTF-16;而 Unix/Linux 系統裏爲了更全面的國際碼支持,其寬字符是四個字節,即 UTF-32 編碼。
        MFC 一般用自家的 TCHAR 和 CString 類支持國際化,當沒有定義 _UNICODE 宏時,TCHAR = char,當定義了 _UNICODE宏 時,TCHAR = wchar_t,CString 內部也是類似的。

在 Windows 系統裏源文件是 GBK ,其命令行編碼也是 GBK;在 Linux 系統裏源文件是 UTF-8,其命令行編碼也是 UTF-8。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章