我在我的swing應用程序中顯示unicode字符時遇到問題。
在認爲問題是使用的字體,它不包含適合中文的字符。
(只空盒顯示)
Unicode字符不在Swing中呈現,實際使用什麼字體?
這裏有一些更多的相關信息,以我的問題(我做了一些調查):
的Linux(Kubuntu的14.04):
當我開始我的JAVA程序6,中文字符是不顯示(只有空格)。
(通過getFont()返回標籤字體返回:DejaVu Sans)
當我用JAVA 7開始我的程序時,中文字符顯示正確!
當我與Java 6中開始我的計劃,中國文字中正確顯示:
:
的Windows(8.1)(要求通過標籤字體的getFont()返回幻覺記憶三世)!
(通過getFont()返回標籤字體返回:SansSerif)
當我用JAVA 7開始我的程序時,中文字符顯示正確!
(詢問標籤通過的getFont字體()返回:SANSSERIF)
$ JAVA_HOME/LIB /字體,(這似乎被用作後備-字體)兩者的Java版本(6 + 7)包含相同的字體。 (在兩個系統上)
字體文件具有相同的大小(Java6 + Java7)和fontconfig.properties.src也是相同的。
當我直接詢問Label(通過getFont())時,它在Windows(8.1)和我的Kubuntu(14.04)上返回「SansSerif」和「DejaVu Sans」。
(見截圖)
開始於Linux的用JAVA 6:
開始於Linux的用JAVA 7:
「SANSSERIF」 在Windows被正確顯示的字符,但是使用了哪些SansSerif-Font? MS SansSerif(唯一帶有SansSerif名稱的字體)並不包含所有這些中文字符。
編輯:
和DejaVuSans一樣。
看起來DejaVu Sans沒有漢字! (但是,他們顯示!)
編輯2:
我試圖安德魯發佈的代碼(參見:How to determine if 2 fonts have equivalent glyphs?),但與中國例如文本
這是結果:
開始於Linux的用JAVA 6:
開始在Linux上使用JAVA 7:
編輯3:
爲reqested,這裏的字符串,我已經測試:
String s = "\u6253\u5370\u8FC7\u671F\u8BC1\u4E66\u8BB0\u5F55"; //means: 打印過期證書記錄
JOptionPane.showMessageDialog(null, s);
的問題是:
哪些字體(在系統上)是真正使用,我如何能找出?
在此先感謝!
我不知道的你的問題的答案。 OTOH,找到哪些字體***可以顯示字符串,我建議檢查['字體。canDisplayUpTo(String)'](http://docs.oracle.com/javase/8/docs/api/java/awt/Font.html#canDisplayUpTo-java.lang.String-).. – 2014-09-04 10:40:26
感謝您的建議,但與'Font.canDisplay ...'我找不到**哪個**字體被使用。 – Ben 2014-09-04 10:43:39
確實如此,但你總是可以使用**的**字體** ***順便說一句 - 我想也應該可以比較'Serif'字體的'GlyphVector'和所有字體的'GlyphVector',爲那些產生相同的字形矢量的列表。但是這不是我想要投入生產應用程序的東西。因爲它可能很耗時。我無法真正看到確定特定系統上的邏輯字體映射到哪些字體的問題。如屏幕截圖所示,它們可能會在Java版本之間發生變化。 – 2014-09-04 10:49:04