我可以講清楚編碼

1.ANSI

\qquadANSI:美國國家標準學會(AMERICAN NATIONAL STANDARDS INSTITUTE: ANSI)成立於1918年。當時,美國的許多企業和專業技術團體,已開始了標準化工作,但因彼此間沒有協調,存在不少矛盾和問題。爲了進一步提高效率,數百個科技學會、協會組織和團體,均認爲有必要成立一個專門的標準化機構,並制訂統一的通用標準。
\qquadANSI百度百科。ANSI是一種字符代碼,爲使計算機支持更多語言,通常使用 0x00~ 0x7f 範圍的1 個字節來表示 1 個英文字符。超出此範圍的使用0x80~0xFFFF來編碼,即擴展的ASCII編碼。
\qquad爲使計算機支持更多語言,通常使用 0x80~0xFFFF 範圍的 2 個字節來表示 1 個字符。比如:漢字“中”在中文操作系統中,使用 [0xD6,0xD0] 這兩個字節存儲。
\qquad不同的國家和地區制定了不同的標準,由此產生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的編碼標準。這些使用多個字節來代表一個字符的各種漢字延伸編碼方式,稱爲 ANSI 編碼。在簡體中文Windows操作系統中,ANSI 編碼代表 GBK 編碼;在繁體中文Windows操作系統中,ANSI編碼代表Big5。
\qquad也就是說,ANSI是很神奇的,會根據不同語言的系統自動改變編碼格式。

2.ASCII

\qquadASCII ((American Standard Code for Information Interchange): 美國信息交換標準代碼)。
\qquadASCII碼使用指定的7位或8位二進制數組合來表示128或256種可能的字符。標準ASCII碼也叫基礎ASCII碼,使用7位二進制數(剩下的1位二進制爲0)來表示所有的大寫和小寫字母,數字0到9、標點符號,以及在美式英語中使用的特殊控制字符。
\qquad同時還要注意,在標準ASCII中,其最高位(b7)用作奇偶校驗位。所謂奇偶校驗,是指在代碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。奇校驗規定:正確的代碼一個字節中1的個數必須是奇數,若非奇數,則在最高位b7添1;偶校驗規定:正確的代碼一個字節中1的個數必須是偶數,若非偶數,則在最高位b7添1。即標準ASCII碼還有奇偶校驗。ASCII表。
\qquad目前的文字編碼標準主要有 ASCII、GB2312、GBK、Unicode等。ASCII 編碼是最簡單的西文編碼方案。GB2312、GBK、GB18030 是漢字字符編碼方案的國家標準。ISO/IEC 10646 和 Unicode 都是全球字符編碼的國際標準。

3.Unicode

\qquadUnicode是一個編碼方案,Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每個字符設定了統一併且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。Unicode 編碼共有三種具體實現,分別爲utf-8,utf-16,utf-32,其中utf-8佔用一到四個字節,utf-16佔用二或四個字節,utf-32佔用四個字節。Unicode 碼在全球範圍的信息交換領域均有廣泛的應用。官網,打開很慢。
\qquad在Unicode中:漢字“字”對應的數字是23383(十進制),十六進制表示爲5B57。在Unicode中,我們有很多方式將數字23383表示成程序中的數據,包括:UTF-8、UTF-16、UTF-32。UTF是“Unicode Transformation Format”的縮寫,可以翻譯成Unicode字符集轉換格式,即怎樣將Unicode定義的數字轉換成程序數據。
\qquad例如,“漢字”對應的數字是0x6c49和0x5b57,而編碼的程序數據是:

char data_utf8[]={0xE6,0xB1,0x89,0xE5,0xAD,0x97};//UTF-8編碼
char16_t data_utf16[]={0x6C49,0x5B57};        //UTF-16編碼
char32_t data_utf32[]={0x00006C49,0x00005B57};//UTF-32編碼

\qquad這裏用char、char16_t、char32_t分別表示無符號8位整數,無符號16位整數和無符號32位整數。UTF-8、UTF-16、UTF-32分別以char、char16_t、char32_t作爲編碼單位。(注:char16_t 和 char32_t 是 C++ 11 標準新增的關鍵字。如果你的編譯器不支持 C++ 11 標準,請改用 unsigned short 和 unsigned long。)“漢字”的UTF-8編碼需要6個字節。“漢字”的UTF-16編碼需要兩個char16_t,大小是4個字節。“漢字”的UTF-32編碼需要兩個char32_t,大小是8個字節。根據字節序的不同,UTF-16可以被實現爲UTF-16LE或UTF-16BE,UTF-32可以被實現爲UTF-32LE或UTF-32BE。

參考文件:字符編碼。

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