Unicode編碼

ASCII
(American Standard Code for Information Interchange "美國信息交換標準碼")
1. 7 bits表示一個字符, 共128個字符
2、第一個bit總是0,用1 byte(7bit)表示字符
3、IBM擴展,共256字符,第一個bit爲1時表示擴展的字符


字符標準組織
Unicode  —— Unicode
ISO      —— UCS(Universal Character Set)
UCS(ISO制定的標準), 和Unicode是完全一樣的,僅名字不同。


Unicode涉及兩個步驟
1、定義一個規範,給所有字符指定唯一對應的數字,這完全是數學問題,跟計算機無關。
2、怎麼把字符對應的數字保存在計算機中,這就涉及到實際在計算機中佔多少字節空間。




Unicode 版本1
—— 兩個字節(16bit)來表示所有字符
     1. 其中0至127表示ASCII字符。2^16=65536 剩餘字符表示漢字等。
     2. 怎麼把0至65535這些數字轉化成01串保存到計算機中. 即UTF(Unicode transformation format),有UTF-8,UTF-16.


UTF-16 —— 即Unicode 16,UCS-2; 始終用兩個字節(16bit)來表示所有字符。
            優點:中文較多時比較節省空間;
                  程序始終按兩個字節(16bit)來解析,簡單;
                  容錯能力強,即使某個字節傳輸錯誤,也隻影響1個字符(2bytes)。 


UTF-8  —— 變長編碼,Unicode版本,只能1-2-3個字節來表示所有字符。
            優點:英文較多時比較節省空間;
                  
 
用UTF-16表示"漢"
01101100 01001001(共16 bit,兩個字節)


用UTF-8表示"漢"  (程序需要一個字節一個字節地讀取)
一字節:0xxxxxxx, 以0開頭,XX代表任意bit,跟ASCII一樣。
兩字節:110xxxxx 10xxxxxx,兩字節爲一單元,可表示2^11=2048 個字符
三字節:1110xxxx 10xxxxxx 10xxxxxx 三字節爲一單元,可表示2^16=65536 個字符
"漢"的編碼27721大於2048,只能用三個字節來表示。
只需把27721=110110001001001 依次放入三字節xxx中即可 (Big-Endian從左到右放,Little-Endian從右到左放)




Unicode 版本2
—— 65536字符數不夠多,需要更多字符擴展
UTF16(UCS-2)  只能2字節、4字節
UTF32(UCS-4)  所有字符都用4字節表示
UTF-8         可變長,任意1-8個字節




文本開頭標誌 —— 決定編碼方式
EF BB BF    UTF-8
FE FF     UTF-16/UCS-2, little endian
FF FE     UTF-16/UCS-2, big endian
FF FE 00 00  UTF-32/UCS-4, little endian.
00 00 FE FF  UTF-32/UCS-4, big-endian.




參考資料:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html






   採用UTF-16(UCS-2) 2字節定長編碼
    Unicode (UTF-16) UCS-2    Java String轉換
       try {
byte[] arr = {0x51, 0x3f};
            String content = new String(arr, "UnicodeBigUnmarked");
            System.out.println(content);   // 兒
            byte[] arr1 = {0x00,  0x61};
            content = new String(arr1, "UnicodeBigUnmarked");
            System.out.println(content);   //  a
        } catch (UnsupportedEncodingException e) {
            // TODO: handle exception
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章