<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    so true

    心懷未來,開創未來!
    隨筆 - 160, 文章 - 0, 評論 - 40, 引用 - 0
    數據加載中……

    字符編碼方式基本知識

    ASCII:基本字符集是128個常用字符,擴展字符集是128個,共256個,用1個字節表示。
    GB2312:6千多個常用漢字
    GBK:1萬多個漢字
    GB18030:更多,不過依然是兩個字節來表示漢字。
    上面三種GB*可以統一稱為ANSI編碼,且16個bit的第一個必定是1。
    BIG5:繁體字符集,用于臺灣地區

    Unicode:兩字節表示的世界通用碼,存儲為文本時會有連個字節的頭信息。
    UTF-8:一種以8個bit為一組的Unicode的表示格式,存儲為本文時有三個字節的頭信息。
    UTF-16:16個bit為一組

    單詞全稱:
    ASCII: American Standard Code Information Interchange
    ANSI: American National Standard Institue
    GB: Guo Biao
    UTF: Unicode Translation Format

    ========================================================
    字符是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。字符集是多個字符的集合,字符集種類較多,每個字符集包含的字符個數不同,常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、 GB 18030字符集、Unicode字符集等。計算機要準確的處理各種字符集文字,需要進行字符編碼,以便計算機能夠識別和存儲各種文字。

    中文文字數目大,而且還分為簡體中文和繁體中文兩種不同書寫規則的文字,而計算機最初是按英語單字節字符設計的,因此,對中文字符進行編碼,是中文信息交流的技術基礎。本文將按照字符集的時間順序討論幾種典型的字符集,選取幾種代表性的中文字符集,研究歷史由來、特點、技術特征。

    ASCII 字符集

    1.名稱的由來

    ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是基于羅馬字母表的一套電腦編碼系統。

    2.特點

    它主要用于顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,并等同于國際標準ISO 646。

    3.包含內容

    控制字符:回車鍵、退格、換行鍵等。

    可顯示字符:英文大小寫字符、阿拉伯數字和西文符號

    4.技術特征

    7位(bits)表示一個字符,共128字符

    5.ASCII擴展字符集

    7位編碼的字符集只能支持128個字符,為了表示更多的歐洲常用字符對ASCII進行了擴展,ASCII擴展字符集使用8位(bits)表示一個字符,共256字符。

    ASCII擴展字符集比ASCII字符集擴充出來的符號包括表格符號、計算符號、希臘字母和特殊的拉丁符號。

    GB2312 字符集

     1.名稱的由來

    GB2312又稱為GB2312-80字符集,全稱為《信息交換用漢字編碼字符集·基本集》,由原中國國家標準總局發布,1981年5月1日實施。

    2.特點

    GB2312是中國國家標準的簡體中文字符集。它所收錄的漢字已經覆蓋99.75%的使用頻率,基本滿足了漢字的計算機處理需要。在中國大陸和新加坡獲廣泛使用。

    3.包含內容

    GB2312收錄簡化漢字及一般符號、序號、數字、拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母,共 7445 個圖形字符。其中包括6763個漢字,其中一級漢字3755個,二級漢字3008個;包括拉丁字母、希臘字母、日文平假名及片假名字母、俄語西里爾字母在內的682個全角字符。

    4.技術特征

    (1)分區表示:

    GB2312中對所收漢字進行了“分區”處理,每區含有94個漢字/符號。這種表示方式也稱為區位碼。

    各區包含的字符如下:01-09區為特殊符號;16-55區為一級漢字,按拼音排序;56-87區為二級漢字,按部首/筆畫排序;10-15區及88-94區則未有編碼。

    (2)雙字節表示

    兩個字節中前面的字節為第一字節,后面的字節為第二字節。習慣上稱第一字節為“高字節” ,而稱第二字節為“低字節”。

    “高位字節”使用了0xA1-0xF7(把01-87區的區號加上0xA0),“低位字節”使用了0xA1-0xFE(把01-94加上0xA0)。

    5.編碼舉例

    以GB2312字符集的第一個漢字“啊”字為例,它的區號16,位號01,則區位碼是1601,在大多數計算機程序中,高字節和低字節分別加0xA0得到程序的漢字處理編碼0xB0A1。計算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。

    BIG5 字符集

    1.名稱的由來

    又稱大五碼或五大碼,1984年由臺灣財團法人信息工業策進會和五間軟件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大眾 (FIC)創立,故稱大五碼。

    Big5碼的產生,是因為當時臺灣不同廠商各自推出不同的編碼,如倚天碼、IBM PS55、王安碼等,彼此不能兼容;另一方面,臺灣政府當時尚未推出官方的漢字編碼,而中國大陸的GB2312編碼亦未有收錄繁體中文字。

    2.特點

    Big5字符集共收錄13,053個中文字,該字符集在中國臺灣使用。耐人尋味的是該字符集重復地收錄了兩個相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0xDDFC)。

    3.字符編碼方法

    Big5碼使用了雙字節儲存方法,以兩個字節來編碼一個字。第一個字節稱為“高位字節”,第二個字節稱為“低位字節”。高位字節的編碼范圍0xA1-0xF9,低位字節的編碼范圍0x40-0x7E及0xA1-0xFE。

    各編碼范圍對應的字符類型如下:0xA140-0xA3BF為標點符號、希臘字母及特殊符號,另外于0xA259-0xA261,存放了雙音節度量衡單位用字:兙兛兞兝兡兣嗧瓩糎;0xA440-0xC67E為常用漢字,先按筆劃再按部首排序;0xC940-0xF9D5為次常用漢字,亦是先按筆劃再按部首排序。

    4.Big5 的局限性

    盡管Big5碼內包含一萬多個字符,但是沒有考慮社會上流通的人名、地名用字、方言用字、化學及生物科等用字,沒有包含日文平假名及片假名字母。

    例如臺灣視“著”為“著”的異體字,故沒有收錄“著”字。康熙字典中的一些部首用字(如“亠”、“疒”、“辵”、“癶”等)、常見的人名用字(如“堃”、“煊”、“栢”、“喆”等) 也沒有收錄到Big5之中。

    GB18030 字符集

    1.名稱的由來

    GB 18030的全稱是GB18030-2000《信息交換用漢字編碼字符集基本集的擴充》,是我國政府于2000年3月17日發布的新的漢字編碼國家標準,2001年8月31日后在中國市場上發布的軟件必須符合本標準

    2.特點

    GB 18030字符集標準的出臺經過廣泛參與和論證,來自國內外知名信息技術行業的公司,信息產業部和原國家質量技術監督局聯合實施。

    GB 18030字符集標準解決漢字、日文假名、朝鮮語和中國少數民族文字組成的大字符集計算機編碼問題。該標準的字符總編碼空間超過150萬個編碼位,收錄了27484個漢字,覆蓋中文、日文、朝鮮語和中國少數民族文字。滿足中國大陸、香港、臺灣、日本和韓國等東亞地區信息交換多文種、大字量、多用途、統一編碼格式的要求。并且與Unicode 3.0版本兼容,填補Unicode擴展字符字匯“統一漢字擴展A”的內容。并且與以前的國家字符編碼標準(GB2312,GB13000.1)兼容。

    3.編碼方法

    GB 18030標準采用單字節、雙字節和四字節三種方式對字符編碼。單字節部分使用0×00至0×7F碼(對應于ASCII碼的相應碼)。雙字節部分,首字節碼從0×81至0×FE,尾字節碼位分別是0×40至0×7E和0×80至0×FE。四字節部分采用GB/T 11383未采用的0×30到0×39作為對雙字節編碼擴充的后綴,這樣擴充的四字節編碼,其范圍為0×81308130到0×FE39FE39。其中第一、三個字節編碼碼位均為0×81至0×FE,第二、四個字節編碼碼位均為0×30至0×39。

    4.包含的內容

    雙字節部分收錄內容主要包括GB13000.1全部CJK漢字20902個、有關標點符號、表意文字描述符13個、增補的漢字和部首/構件80個、雙字節編碼的歐元符號等。  四字節部分收錄了上述雙字節字符之外的,包括CJK統一漢字擴充A在內的GB 13000.1中的全部字符。

    Unicode字符集

    1.名稱的由來

    Unicode字符集編碼是Universal Multiple-Octet Coded Character Set 通用多八位編碼字符集的簡稱,是由一個名為 Unicode 學術學會(Unicode Consortium)的機構制訂的字符編碼系統,支持現今世界各種不同語言的書面文本的交換、處理及顯示。該編碼于1990年開始研發,1994年正式公布,最新版本是2005年3月31日的Unicode 4.1.0。

    2.特征

    Unicode是一種在計算機上使用的字符編碼。它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。

    3.編碼方法

    Unicode 標準始終使用十六進制數字,而且在書寫時在前面加上前綴“U+”,例如字母“A”的編碼為 004116 和字符“?”的編碼為 20AC16。所以“A”的編碼書寫為“U+0041”。

    4.UTF-8 編碼
    UTF-8是Unicode的其中一個使用方式。 UTF是 Unicode Translation Format,即把Unicode轉做某種格式的意思。

    UTF-8便于不同的計算機之間使用網絡傳輸不同語言和編碼的文字,使得雙字節的Unicode能夠在現存的處理單字節的系統上正確傳輸。

    UTF-8使用可變長度字節來儲存 Unicode字符,例如ASCII字母繼續使用1字節儲存,重音文字、希臘字母或西里爾字母等使用2字節來儲存,而常用的漢字就要使用3字節。輔助平面字符則使用4字節。

    5.UTF-16 和 UTF-32 編碼
    UTF-32、UTF-16 和 UTF-8 是 Unicode 標準的編碼字符集的字符編碼方案,UTF-16 使用一個或兩個未分配的 16 位代碼單元的序列對 Unicode 代碼點進行編碼;UTF-32 即將每一個 Unicode 代碼點表示為相同值的 32 位整數。
    ========================================================
    什么是unicode, GB2312, GBK, ANSI, UTF

    發展過程 ASCII à GB2312(BIG5) à GBKàGB18030 

    字符必須編碼后才能被計算機處理。計算機使用的缺省編碼方式就是計算機的內碼。早期的計算機使用7位的ASCII編碼,為了處理漢字,程序員設計了用于簡體中文的GB2312和用于繁體中文的big5。

    GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼范圍高字節從B0-F7,低字節從A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。

    GB2312支持的漢字太少。1995年的漢字擴展規范GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字符。

    從ASCII、GB2312到GBK,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,后面的標準支持更多的字符。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高字節的最高位不為0。按照程序員的稱呼,GB2312、GBK都屬于雙字節字符集 (DBCS)。

    2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。從漢字字匯上說,GB18030在GB13000.1的20902個漢字的基礎上增加了CJK擴展A的6582個漢字(Unicode碼 0x3400-0x4db5),一共收錄了27484個漢字。

    CJK就是中日韓的意思。Unicode為了節省碼位,將中日韓三國語言中的文字統一編碼。GB13000.1就是ISO/IEC 10646-1的中文版,相當于Unicode 1.1。

    GB18030的編碼采用單字節、雙字節和4字節方案。其中單字節、雙字節和GBK是完全兼容的。4字節編碼的碼位就是收錄了CJK擴展A的6582個漢字。例如:UCS的0x3400在GB18030中的編碼應該是8139EF30,UCS的0x3401在GB18030中的編碼應該是8139EF31。

    微軟提供了GB18030的升級包,但這個升級包只是提供了一套支持CJK擴展A的6582個漢字的新字體:新宋體-18030,并不改變內碼。Windows 的內碼仍然是GBK。 

    從ASCII、GB2312、GBK到GB18030的編碼方法是向下兼容的。而Unicode只與ASCII兼容

    Unicode也是一種字符編碼方法,不過它是由國際組織設計,可以容納全世界所有語言文字的編碼方案。unicode 為java 中的編碼轉換橋梁,使用了以組流過濾器來橋接unicode編碼文本和本地操作系統編碼文本的隔閡(內碼,如windows的GBK).所有的class 派生自abstract class Reader and Writer .后面繼續研究. 

    由于現有的大量程序和文檔都采用了某種特定語言的編碼,例如GBK,Windows不可能不支持現有的編碼,而全部改用Unicode。我們稱GBK為windows的內碼.Windows使用代碼頁(code page)來適應各個國家和地區。code page可以被理解為內碼。GBK對應的code page是CP936。

     what is UCS?

    Unicode的學名是"Universal Multiple-Octet Coded Character Set",簡稱為UCS。UCS可以看作是"Unicode Character Set"的縮寫。

    UCS有兩種格式:UCS-2和UCS-4。顧名思義,UCS-2就是用兩個字節編碼,UCS-4就是用4個字節(實際上只用了31位,最高位必須為0)編碼。 

    什么是UTF

    UTF,是Unicode Text Format的縮寫,意為Unicode文本格式。對于UTF,是這樣定義的 

    (1)如果Unicode的16位字符的頭9位是0,則用一個字節表示,這個字節的首位是 “0”,剩下的7位與原字符中的后7位相同,如“\u0034”(0000 0000 0011 0100),用“34” (0011 0100)表示;(與源Unicode字符是相同的); 

    (2)如果Unicode的16位字符的頭5位是0,則用2個字節表示,首字節是“110”開頭,后面的5位與源字符中除去頭5個零后的最高5位相同;第二個字節以“10”開頭,后面的6位與源字符中的低6位相同。如“\ u025d”(0000 0010 0101 1101),轉化后為“c99d”(1100 1001 1001 1101);

    (3)如果不符合上述兩個規則,則用三個字節表示。第一個字節以“1110”開頭,后四位為源字符的高四位;第二個字節以“10”開頭,后六位為源字符中間的六位;第三個字節以“10”開頭,后六位為源字符的低六位;如“\u9da7”(1001 1101 1010 0111),轉化為“e9b6a7”(1110 1001 1011 0110 1010 0111); 

    UCS 和 UTF 的聯系

    UTF-8就是以8位為單元對UCS進行編碼

    UTF-16以16位為單元對UCS進行編碼

    big endian和little endian

    big endian和little endian是CPU處理多字節數的不同方式。例如“漢”字的Unicode編碼是6C49。那么寫到文件里時,究竟是將6C寫在前面,還是將49寫在前面?如果將6C寫在前面,就是big endian。如果將49寫在前面,就是little endian。

    “endian”這個詞出自《格列佛游記》。小人國的內戰就源于吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開,由此曾發生過六次叛亂,一個皇帝送了命,另一個丟了王位。

    我們一般將endian翻譯成“字節序”,將big endian和little endian稱作“大尾”和“小尾”。
    =================================================
    GB2312是GBK的子集,GBK是GB18030的子集
    GBK是包括中日韓字符的大字符集合
    如果是中文的網站 推薦GB2312 GBK有時還是有點問題
    為了避免所有亂碼問題,應該采用UTF-8,將來要支持國際化也非常方便
    UTF-8可以看作是大字符集,它包含了大部分文字的編碼。
    使用UTF-8的一個好處是其他地區的用戶(如香港臺灣)無需安裝簡體中文支持就能正常觀看你的文字而不會出現亂碼。

    詞條:UTF8
    UTF8并不算是一種電腦編碼,而是一種儲存和傳送的格式,如前所述,每個Unicode/UCS字符都以 2或4個bytes來儲存,看看以下的比較:

      以"I am Chinese"為例
       用ANSI儲存:12 Bytes
       用Unicode/UCS2儲存:24 Bytes + 2 Bytes(header)
       用UCS4儲存:48 Bytes + 4 Bytes(header)

      以"我是中國人"為例
       用ANSI儲存:10 Bytes
       用Unicode/UCS2儲存:10 Bytes + 2 Bytes(header)
       用UCS4儲存:20 Bytes + 4 Bytes(header)

      由此可見直接以Unicode/UCS的原始形式來儲存是一種極大的浪費,而且也不利于互聯網的傳輸(中文稍為合算一點^_^)。

      有見及此,Unicode/UCS的壓縮形式--UTF8出現了,套用官方網站的首句話『UTF-8 stands for Unicode Transformation Format-8. It is an octet (8-bit) lossless encoding of Unicode characters.』,由于UTF也適用于編碼UCS,故亦可稱為『UCS transformation formats (UTF)』

      UTF8是以8bits即1Bytes為編碼的最基本單位,當然也可以有基于16bits和32bits的形式,分別稱為UTF16和UTF32,但目前用得不多,而UTF8則被廣泛應用在文件儲存和網絡傳輸中。


    編碼原理

    先看這個模板:

    UCS-4 range (hex.) UTF-8 octet sequence (binary)
    0000 0000-0000 007F 0xxxxxxx
    0000 0080-0000 07FF 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx

    0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    0400 0000-7FFF FFFF 1111110x 10xxxxxx ... 10xxxxxx

    編碼步驟:
    1) 首先確定需要多少個8bits(octets)
    2) 按照上述模板填充每個octets的高位bits
    3) 把字符的bits填充至x中,字符順序:低位→高位,UTF8順序:最后一個octet的最末位x→第一個octet最高位x
    4) 解碼的原理一樣。

    實例:(留意每個bit的顏色,粗體字為模板內容)

    UCS-4 UTF-8
    HEX BIN Bytes BIN HEX Bytes
    0000 000A 00001010 4 00001010 0A 1
    0000 0099 10011001 4 11000010 10011001 C2 99 2
    0000 8D99 10001101 10011001 4 11101000 10110110 10011001 E8 B6 99 3

      不知大家看懂了沒有,其實不懂也無所謂,反正又不用自己算,程式可以完全代勞。

      以UTF8格式儲存的文件檔首標識為EF BB BF。


    效率

      從上述編碼原理中得出的結論是:
       1.每個英文字母、數字所占的空間為1 Byte;
       2.泛歐語系、斯拉夫語字母占2 Bytes;
       3.漢字占3 Bytes。

      由此可見UTF8對英文來說是個非常誘人的方案,但對中文來說則不太合算,無論用ANSI還是 Unicode/UCS2來編碼都只用2 Bytes,但用UTF8則需要3 Bytes。

      以下是一些統計資料,顯示用UTF8來儲存文件每個字符所需的平均字節:
       1.拉丁語系平均用1.1 Bytes;
       2.希臘文、俄文、阿拉伯文和希伯萊文平均用1.7 Bytes;
       3.其他大部份文字如中文、日文、韓文、Hindi(北印度語)用約3 Bytes;
       4.用超過4 Bytes的都是些非常少用的文字符號。

    詞條:GB2312
    字符必須編碼后才能被計算機處理。計算機使用的缺省編碼方式就是計算機的內碼。早期的計算機使用7位的ASCII編碼,為了處理漢字,程序員設計了用于簡體中文的GB2312和用于繁體中文的big5。

    GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼范圍高字節從B0-F7,低字節從A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。

    GB2312支持的漢字太少。1995年的漢字擴展規范GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字符。2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平臺必須支持GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支持GB2312。

    從ASCII、GB2312、GBK到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中總是有相同的編碼,后面的標準支持更多的字符。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高字節的最高位不為0。按照程序員的稱呼,GB2312、GBK到GB18030都屬于雙字節字符集 (DBCS)。

    有的中文Windows的缺省內碼還是GBK,可以通過GB18030升級包升級到GB18030。不過GB18030相對GBK增加的字符,普通人是很難用到的,通常我們還是用GBK指代中文Windows內碼。

    這里還有一些細節:

    GB2312的原文還是區位碼,從區位碼到內碼,需要在高字節和低字節上分別加上A0。

    在DBCS中,GB內碼的存儲格式始終是big endian,即高位在前。

    GB2312的兩個字節的最高位都是1。但符合這個條件的碼位只有128*128=16384個。所以GBK和GB18030的低字節最高位都可能不是1。不過這不影響DBCS字符流的解析:在讀取DBCS字符流時,只要遇到高位為1的字節,就可以將下兩個字節作為一個雙字節編碼,而不用管低字節的高位是什么。

     

    posted on 2008-08-18 16:14 so true 閱讀(2282) 評論(1)  編輯  收藏 所屬分類: Others

    評論

    # re: 字符編碼方式基本知識  回復  更多評論   

    編碼沒看懂……
    2008-08-18 17:01 | llz
    主站蜘蛛池模板: 在线亚洲人成电影网站色www| 亚洲国产成人精品久久久国产成人一区二区三区综| 亚洲午夜国产精品无码老牛影视| 男女猛烈无遮掩视频免费软件| 性做久久久久免费观看| 久久亚洲中文字幕无码| 免费v片在线观看品善网| 免费中文字幕视频| 亚洲人成亚洲人成在线观看| 国产成人免费ā片在线观看老同学 | 亚洲国产国产综合一区首页| 国产情侣久久久久aⅴ免费| 国产精品亚洲一区二区三区在线| 永久免费AV无码网站国产| 亚洲国产精品自在在线观看| 91高清免费国产自产| 国产精品亚洲四区在线观看| 白白国产永久免费视频| 色吊丝性永久免费看码| 亚洲AV无码第一区二区三区| 免费能直接在线观看黄的视频| 中文字幕 亚洲 有码 在线| 国产麻豆剧传媒精品国产免费| 一级毛片免费播放男男| 亚洲网站在线观看| 在人线av无码免费高潮喷水| 在线91精品亚洲网站精品成人| 国产亚洲精品福利在线无卡一 | 亚洲另类视频在线观看| 成人免费看片又大又黄| 一级免费黄色大片| 亚洲高清在线播放| 免费的一级片网站| a国产成人免费视频| 久久精品国产亚洲αv忘忧草| 国产一区二区三区在线免费观看| 天黑黑影院在线观看视频高清免费| 亚洲色欲www综合网| 全黄a免费一级毛片人人爱| 久久精品国产免费| 亚洲精品动漫免费二区|