關(guān)于java字符輸出到界面時(shí)的問(wèn)題
都知道java的字符編碼方案是采用unicode的。比如 String test = "test 編碼";
那么"test 編碼"是采用unicode編碼后的二進(jìn)制形式保存。
然而如果要把test輸出到系統(tǒng)邊界以外的地方,那么都可能要涉及到編碼轉(zhuǎn)換問(wèn)題,無(wú)論是文件還是網(wǎng)絡(luò)的另一端。
不過(guò)沒(méi)關(guān)系,java提供了強(qiáng)大的I/O庫(kù),有Reader 和 Writer兩個(gè)適配器體系,我們可以將test以我們想要的編碼方案輸出。
但是如果將test的東西輸出到界面時(shí)到有些問(wèn)題了,本來(lái)從概念上界面也是系統(tǒng)的邊界,所以u(píng)nix有一切皆文件的抽象,當(dāng)然如果界面是交互 性GUI時(shí)這個(gè)抽象顯然是不夠的,這就不論了。關(guān)鍵是GUI系統(tǒng)并沒(méi)有提供類似javaI/O的這種能力,java也沒(méi)有直接以u(píng)nicode形式輸出給 GUI系統(tǒng),而是好像會(huì)把內(nèi)存中變量字符再通過(guò)系統(tǒng)默認(rèn)語(yǔ)言(字符集)編碼去轉(zhuǎn)換,然后扔給繪圖系統(tǒng)吧!
這樣的話如果 JLable label = new JLabel(test);
那么這個(gè)label的顯示在簡(jiǎn)體中文版的OS上沒(méi)問(wèn)題,但如果在繁體中文版的OS可能就有問(wèn)題了。
按理說(shuō)swing是獨(dú)立于本地OS的GUI系統(tǒng),但是他還是建立在java2D上,而java2D還是要利用本地的繪圖系統(tǒng),像渲染文字這種繪圖是不是java2D還是利用了本地繪圖系統(tǒng)呢!
java GUI “?” “口” 這兩個(gè)我都碰到過(guò)。
如果某中編碼方案里沒(méi)有這個(gè)文字,java會(huì)用" ?"這個(gè)代替。
如果某種文字沒(méi)有相應(yīng)的字體,java會(huì)用"口"代替。
java在輸出到系統(tǒng)界面時(shí)會(huì)把內(nèi)存中變量字符再通過(guò)系統(tǒng)默認(rèn)語(yǔ)言(字符集)編碼去轉(zhuǎn)換!
我覺(jué)得如果java自己實(shí)現(xiàn)所有unicode支持的文字的繪圖(基于更低級(jí)的圖形API),那么他沒(méi)有必要轉(zhuǎn),因?yàn)閡nicode字符給java圖形系統(tǒng),他都能把它表現(xiàn)出來(lái),當(dāng)然java圖形系統(tǒng)基于OS的更低級(jí)的圖形API。
是不是java自己實(shí)現(xiàn)所有unicode支持的文字的繪圖這項(xiàng)任務(wù)比比較困難。
如果java能做到這樣真的很強(qiáng)大??!
這樣的話JLable label = new JLabel(test); 無(wú)論在什么語(yǔ)言版的OS 都OK。
posted on 2006-10-17 17:46 hhh 閱讀(1048) 評(píng)論(1) 編輯 收藏