原文鏈接:http://blog.csdn.net/yang3wei/article/details/47414483
點擊閱讀原文
-------------------------------------
1)Java?中 char 占兩個字節,既可以表示中文字符,也可以表示英文字符
2)Unicode只是一個編碼規范,目前實際實現的unicode編碼只要有三種:UTF-8, UCS-2 和 UTF-16
3)UCS-2 是固定長度為 16 位的 unicode 字符集。每個字符都是 2 個字節,UCS-2 只支持 unicode3.0,所以不支持附加字符
4)Unix 平臺中普遍支持 UTF-8 字符集,HTML 和大多數瀏覽器也支持 UTF-8,而 windows 和 java 則支持 UCS-2
5)UTF-8 中漢字一般占三個字節,譬如說,1110xxxx 10yyyyyy 10zzzzzz,除去控制字符,實際上就只占兩個字節 xxxxyyyy yyzzzzzz
最初的unicode編碼是固定長度的,16位,也就是2兩個字節代表一個字符,這樣一共可以表示65536個字符。顯然,這樣要表示各種語言中所有的字符是遠遠不夠的。Unicode4.0規范考慮到了這種情況,定義了一組附加字符編碼,附加字符編碼采用2個16位來表示,這樣最多可以定義1048576個附加字符,目前unicode4.0只定義了45960個附加字符。
Unicode只是一個編碼規范,目前實際實現的unicode編碼只要有三種:UTF-8,UCS-2和UTF-16,三種unicode字符集之間可以按照規范進行轉換。
UTF-8
UTF-8是一種8位的unicode字符集,編碼長度是可變的,并且是ASCII字符集的嚴格超集,也就是說ASCII中每個字符的編碼在UTF-8中是完全一樣的。UTF-8字符集中,一個字符可能是1個字節,2個字節,3個字節或者4個字節長。一般來說,歐洲的字母字符長度為1到2個字節,而亞洲的大部分字符則是3個字節,附加字符為4個字節長。
Unix平臺中普遍支持UTF-8字符集,HTML和大多數瀏覽器也支持UTF-8,而window和java則支持UCS-2。
UTF-8的主要優點:
- 對于歐洲字母字符需要較少的存儲空間。
- 容易從ASCII字符集向UTF-8遷移。
UCS-2
UCS-2是固定長度為16位的unicode字符集。每個字符都是2個字節,UCS-2只支持unicode3.0,所以不支持附加字符。
UCS-2的優點:
- 對于亞洲字符的存儲空間需求比UTF-8少,因為每個字符都是2個字節。
- 處理字符的速度比UTF-8更快,因為是固定長度編碼的。
- 對于windows和java的支持更好。
UTF-16
UTF-16也是一種16位編碼的字符集。實際上,UTF-16就是UCS-2加上附加字符的支持,也就是符合unicode4.0規范的UCS-2。所以UTF-16是UCS-2的嚴格超集。
UTF-16中的字符,要么是2個字節,要么是4個字節表示的。UTF-16主要在windows2000以上版本使用。
UTF-16相對UTF-8的優點,和UCS-2是一致的。
Oracle從7.0開始提供對Unicode的支持。Oracle個版本的unicode字符集支主要有:
AL32UTF8
一種UTF-8編碼的字符集,支持最新的unicode4.0標準。字符長度為1,2或者3個字節,附加字符則為4字節長。
UTF8
支持unicode3.0的UTF-8編碼方式。由于附加字符是在unicode3.1中提出的,UTF8不支持附加字符。但是unicode3.0已經為附加字符預留了編碼空間,所以即使在UTF8的數據庫中插入附加字符,也是可以的,只是數據庫會將該字符分隔成兩部分,需要占6個字符的長度。所以,如果需要支持附加字符,那么建議將數據庫的字符集切換為新的AL32UTF8。
UTF8可用于數據庫字符集,也可用于國家字符集。
UTFE
UTFE是基于EBCDIC平臺的unicode字符集,就像ASCII平臺上的UTF8一樣。不同的是,UTFE中,每個字符可能占1,2,3或者4個字節,而附加字符則需要2個4個字節,也就是8個字節來表示。
AL16UTF16
AL16UTF16是一種UTF-16編碼的unicode字符集,在Oracle中用于國家字符集。
AL24UTFFSS
該字符集只支持unicode1.1規范,在Oracle7.2~8i版本中使用,目前已經淘汰。
-------------
更多的Java,Angular,Android,大數據,J2EE,Python,數據庫,Linux,Java架構師,:
http://www.cnblogs.com/zengmiaogen/p/7083694.html