Java。
JVM里面的任何字符串資源都是Unicode,就是說(shuō),任何String類(lèi)型的數據都是Unicode編碼。沒(méi)有例外。既然只有一種編碼,那么,我們可以這么說(shuō),JVM里面的String是不帶編碼的。String相當于 char[]。
JVM里面的 byte[] 數據是帶編碼的。比如,Big5,GBK,GB2312,UTF-8之類(lèi)的。
一個(gè)GBK編碼的byte[] 轉換成 String,其實(shí)就是從GBK編碼向Unicode編碼轉換。
一個(gè)String轉換成一個(gè)Big5編碼的byte[],其實(shí)就是從Unicode編碼向Big5編碼轉換。
所以,Unicode是所有編碼轉換的中間介質(zhì)。所有的編碼都有一個(gè)轉換器可以轉換到Unicode,而Unicode也可以轉換到其他所有的編碼。這樣構成了一個(gè)總線(xiàn)結構。
比如,如果總共有10種編碼,那么只需要 10 + 10 = 20個(gè)轉換器就夠了。如果要是兩兩直接轉換,那么,需要的轉換器數量是一個(gè)組合數字,需要90個(gè)轉換器。
如果在將Unicode轉換到某一本地字符集時(shí),發(fā)現這一編碼字符集不包含這個(gè)字符,怎么辦呢?例如:“我愛(ài)Abbb”這個(gè)字符串(簡(jiǎn)體中文),如果轉換成繁體中文的BIG5編碼,就會(huì )變成:“我?Abbb。原來(lái),Unicode規定,轉換時(shí)碰到“看不懂”的字符,一律用“?(0x3F)”表示。
和編碼過(guò)程類(lèi)似,Unicode規定,在解碼時(shí),發(fā)現“看不懂”的字節,一律用“?(0xFFFD)”表示。例如:將“我愛(ài)Abbb”以UTF-8的編碼方式保存在一個(gè)文件中,用繁體中文編碼BIG5讀入,就會(huì )變成:“?????婢bbb
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。