9.关于Unicode字符集
原文鏈接:http://blog.csdn.net/yang3wei/article/details/47414483
點(diǎn)擊閱讀原文
-------------------------------------
1)Java?中 char 占兩個(gè)字節(jié),既可以表示中文字符,也可以表示英文字符
2)Unicode只是一個(gè)編碼規(guī)范,目前實(shí)際實(shí)現(xiàn)的unicode編碼只要有三種:UTF-8, UCS-2 和 UTF-16
3)UCS-2 是固定長(zhǎng)度為 16 位的 unicode 字符集。每個(gè)字符都是 2 個(gè)字節(jié),UCS-2 只支持 unicode3.0,所以不支持附加字符
4)Unix 平臺(tái)中普遍支持 UTF-8 字符集,HTML 和大多數(shù)瀏覽器也支持 UTF-8,而 windows 和 java 則支持 UCS-2
5)UTF-8 中漢字一般占三個(gè)字節(jié),譬如說(shuō),1110xxxx 10yyyyyy 10zzzzzz,除去控制字符,實(shí)際上就只占兩個(gè)字節(jié) xxxxyyyy yyzzzzzz
最初的unicode編碼是固定長(zhǎng)度的,16位,也就是2兩個(gè)字節(jié)代表一個(gè)字符,這樣一共可以表示65536個(gè)字符。顯然,這樣要表示各種語(yǔ)言中所有的字符是遠(yuǎn)遠(yuǎn)不夠的。Unicode4.0規(guī)范考慮到了這種情況,定義了一組附加字符編碼,附加字符編碼采用2個(gè)16位來(lái)表示,這樣最多可以定義1048576個(gè)附加字符,目前unicode4.0只定義了45960個(gè)附加字符。
Unicode只是一個(gè)編碼規(guī)范,目前實(shí)際實(shí)現(xiàn)的unicode編碼只要有三種:UTF-8,UCS-2和UTF-16,三種unicode字符集之間可以按照規(guī)范進(jìn)行轉(zhuǎn)換。
UTF-8
UTF-8是一種8位的unicode字符集,編碼長(zhǎng)度是可變的,并且是ASCII字符集的嚴(yán)格超集,也就是說(shuō)ASCII中每個(gè)字符的編碼在UTF-8中是完全一樣的。UTF-8字符集中,一個(gè)字符可能是1個(gè)字節(jié),2個(gè)字節(jié),3個(gè)字節(jié)或者4個(gè)字節(jié)長(zhǎng)。一般來(lái)說(shuō),歐洲的字母字符長(zhǎng)度為1到2個(gè)字節(jié),而亞洲的大部分字符則是3個(gè)字節(jié),附加字符為4個(gè)字節(jié)長(zhǎng)。
Unix平臺(tái)中普遍支持UTF-8字符集,HTML和大多數(shù)瀏覽器也支持UTF-8,而window和java則支持UCS-2。
UTF-8的主要優(yōu)點(diǎn):
- 對(duì)于歐洲字母字符需要較少的存儲(chǔ)空間。
- 容易從ASCII字符集向UTF-8遷移。
UCS-2
UCS-2是固定長(zhǎng)度為16位的unicode字符集。每個(gè)字符都是2個(gè)字節(jié),UCS-2只支持unicode3.0,所以不支持附加字符。
UCS-2的優(yōu)點(diǎn):
- 對(duì)于亞洲字符的存儲(chǔ)空間需求比UTF-8少,因?yàn)槊總€(gè)字符都是2個(gè)字節(jié)。
- 處理字符的速度比UTF-8更快,因?yàn)槭枪潭ㄩL(zhǎng)度編碼的。
- 對(duì)于windows和java的支持更好。
UTF-16
UTF-16也是一種16位編碼的字符集。實(shí)際上,UTF-16就是UCS-2加上附加字符的支持,也就是符合unicode4.0規(guī)范的UCS-2。所以UTF-16是UCS-2的嚴(yán)格超集。
UTF-16中的字符,要么是2個(gè)字節(jié),要么是4個(gè)字節(jié)表示的。UTF-16主要在windows2000以上版本使用。
UTF-16相對(duì)UTF-8的優(yōu)點(diǎn),和UCS-2是一致的。
Oracle從7.0開始提供對(duì)Unicode的支持。Oracle個(gè)版本的unicode字符集支主要有:
AL32UTF8
一種UTF-8編碼的字符集,支持最新的unicode4.0標(biāo)準(zhǔn)。字符長(zhǎng)度為1,2或者3個(gè)字節(jié),附加字符則為4字節(jié)長(zhǎng)。
UTF8
支持unicode3.0的UTF-8編碼方式。由于附加字符是在unicode3.1中提出的,UTF8不支持附加字符。但是unicode3.0已經(jīng)為附加字符預(yù)留了編碼空間,所以即使在UTF8的數(shù)據(jù)庫(kù)中插入附加字符,也是可以的,只是數(shù)據(jù)庫(kù)會(huì)將該字符分隔成兩部分,需要占6個(gè)字符的長(zhǎng)度。所以,如果需要支持附加字符,那么建議將數(shù)據(jù)庫(kù)的字符集切換為新的AL32UTF8。
UTF8可用于數(shù)據(jù)庫(kù)字符集,也可用于國(guó)家字符集。
UTFE
UTFE是基于EBCDIC平臺(tái)的unicode字符集,就像ASCII平臺(tái)上的UTF8一樣。不同的是,UTFE中,每個(gè)字符可能占1,2,3或者4個(gè)字節(jié),而附加字符則需要2個(gè)4個(gè)字節(jié),也就是8個(gè)字節(jié)來(lái)表示。
AL16UTF16
AL16UTF16是一種UTF-16編碼的unicode字符集,在Oracle中用于國(guó)家字符集。
AL24UTFFSS
該字符集只支持unicode1.1規(guī)范,在Oracle7.2~8i版本中使用,目前已經(jīng)淘汰。
-------------
更多的Java,Angular,Android,大數(shù)據(jù),J2EE,Python,數(shù)據(jù)庫(kù),Linux,Java架構(gòu)師,:
http://www.cnblogs.com/zengmiaogen/p/7083694.html
總結(jié)
以上是生活随笔為你收集整理的9.关于Unicode字符集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 培训时常犯的学习误区与应对方法
- 下一篇: ER图转换成关系模式集的规则