字符編碼(二)

字符編碼(二)

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

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

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

這裏還有一些細節:

  • GB2312的原文還是區位碼,從區位碼到內碼,需要在高字節和低字節上分別加上AO。
  • 對於任何字符編碼,編碼單元的順序是由編碼方案確定的,與endian無關。例如GBK的編碼單元是字節,用兩個字節表示一個漢字。這兩個字節的順序是固定的,不受CPU字節序的影響。UTF-16的編碼單元是word(雙字節),word之間的順序是編碼方案指定的,word內部的字節排序纔會受到endian影響。後面還會介紹UTF-16。
  • GB2312的兩個字節的最高位都是1。但符合這個條件的碼位只有128*128=16384個。所以GB18030和GBK的底字節最高位都可能不是1。不過這不影響DBCS字符流的解析:在讀取DBCS字符流時,只要遇到高位爲1的字節,就可以將下兩個字節作爲一個雙字節編碼,而不用管低字節的高位是什麼。

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