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
}
(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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.