當(dāng)我在ubuntu 11.04中安裝netbeans 7.0的時(shí)候,出現(xiàn)一個(gè)奇怪的現(xiàn)象,啟動(dòng)netbeans中,發(fā)現(xiàn)很多中文字無(wú)法顯示,直接顯示一個(gè)方框。很顯然是沒(méi)有找到某些字的顯示數(shù)據(jù),但是奇怪的是有些漢字可以顯示,真神奇,難道netbeans所用到的字庫(kù)居然不全嗎?
而 ubuntu可以正常顯示漢字,說(shuō)明ubuntu本身的字庫(kù)應(yīng)該是沒(méi)問(wèn)題到。那么問(wèn)題出在什么地方呢?
答案是:JRE
netbean是用java寫(xiě)的,它的運(yùn)行是必須要依靠JRE的,這個(gè)大家都知道。而JRE使用的字體是依靠JRE本身的配置文件來(lái)決定在系統(tǒng)中和什么字體文件對(duì)應(yīng)的。
因此判定是這種對(duì)應(yīng)出了問(wèn)題。
根據(jù)Java的官方文檔(http://download.oracle.com/javase/1.5.0/docs/guide/intl/fontconfig.html#loading),字體對(duì)應(yīng)配置文件是位于jre/lib下面,有兩種形式,一種是src文件,一種是bfc文件。bfc文件是二進(jìn)制的,系統(tǒng)預(yù)定義的,所以我們需要修改的是src文件,到這個(gè)目錄,一看,如下圖:
看到這些文件名,基本也明白了個(gè)大概。看看fontconfig.OS.version.properties.src這種格式就應(yīng)該明白,這是不同操作系統(tǒng)平臺(tái)的配置文件,jre會(huì)根據(jù)操作系統(tǒng)的不同而自動(dòng)選擇對(duì)應(yīng)的配置文件,因此,我打開(kāi)了ubuntu 的對(duì)應(yīng)文件,看第一行:
代碼如下:
allfonts.chinese-cn-iso10646=-arphic-ar pl uming cn-light-r-normal--*-%d-*-*-c-*-iso10646-1
這里指定了jre用到邏輯字體和物理字體的對(duì)應(yīng)關(guān)系,等號(hào)左邊就是jre用的邏輯字體,而等號(hào)右邊就是需要使用的物理字體了。
只是這個(gè)物理字體看起來(lái)跟火星文差不多,但是這個(gè)火星文可是正宗的X logical font description (XLFD)描述方式,這里不多說(shuō)了,想了解的讀者可以自己去google一下即可。
然后再看配置文件# Font File Names部分,其中有一行:
代碼如下:
filename.-arphic-ar_pl_uming_cn-light-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/truetype/arphic/uming.ttc
這是上面描述的物理字體和系統(tǒng)字體文件的對(duì)應(yīng)描述。
左邊不就是上面我們看著像火星文的物理字體名稱(chēng)嗎?正好不知道哪兒去找這個(gè)字體,這下不就有答案了。連目錄都告訴你了。
立刻跑到/usr/share/fonts/truetype目錄去一看,不要說(shuō)uming.ttc,連arphic這個(gè)目錄都沒(méi)有!
這下就面臨兩個(gè)選擇:
1.修改配置文件,讓他指向系統(tǒng)有的字體文件。
也就是修改:/usr/share/fonts/truetype/arphic/uming.ttc這部分,修改成存在的字體文件名稱(chēng)即可。
2.安裝一個(gè)uming.tcc字體文件。
由于uming.tcc字體是比較有名的,是一個(gè)高質(zhì)量的中文字庫(kù)。因此我還是決定選擇第二種方案。
到網(wǎng)上一goole,立刻找到了下載地址:http://ftp.br.debian.org/debian/pool/main/t/ttf-arphic-uming/ttf-arphic-uming_0.2.20080216.1-3_all.deb
下載回來(lái)之后:sudo dpkg -i ttf-arphic-uming_0.2.20080216.1-3_all.deb
安裝順利完成,這個(gè)時(shí)候再跑到/usr/share/fonts/truetype目錄去一看,這下有arphic這個(gè)目錄了,然后打開(kāi)目錄一看,uming.ttc就在那里!
馬上打開(kāi)netbeans,漫長(zhǎng)的等待,終于看到了窗口,一切都有了,字體看著確實(shí)很美,不愧是arphic 產(chǎn)品啊。
自此問(wèn)題完美的解決了,不管版本如何變化,都可以按照這個(gè)方式去解決問(wèn)題。
網(wǎng)上一些文章說(shuō)的cp字體到j(luò)re/lib/fonts/fallback,很多人不懂原理。fallback的目錄是jre字體后備目錄,意思就是按照正常配置找不到字體信息,就會(huì)在這個(gè)目錄下按照配置文件設(shè)定的順序到字體文件中去尋找。用這個(gè)方式有兩個(gè)問(wèn)題,一個(gè)是效率低下。二是字體不統(tǒng)一,會(huì)出現(xiàn)例如:文件這個(gè)詞,文是楷體,件是黑體的“壯觀”景象!為什么?因?yàn)槲淖衷诳w字庫(kù)找到了,但是這個(gè)字庫(kù)找不到件字,于是就在fallback中到黑體字庫(kù)去找,并且找到。這種現(xiàn)象就神奇的出現(xiàn)了!
所以這個(gè)方式其實(shí)是屬于歪打正著的方法,很多人糊里糊涂顯示正常了,也沒(méi)有搞懂原理。而另外一些人就會(huì)出現(xiàn)字體不統(tǒng)一到情況。
當(dāng)然,上面所說(shuō)的一切,在windows上均不會(huì)發(fā)生。因?yàn)閣indows比較統(tǒng)一,所以配置文件的配置一定可以正常工作,不會(huì)出現(xiàn)類(lèi)似linux的連字體文件都可能找不到的情況。這也證明了規(guī)范,統(tǒng)一在軟件中的重要性。