1. 程式人生 > >linux下面java字型的設定

linux下面java字型的設定

這兩天碰到一個棘手的問題, 就是java的字型到了mac下面, 宋體不見了, 變成了simsun, 這個對應關係如何產生的呢?

先記下這個問題。

Linux中,JAVA程式的中文預設可能不正常:或是顯示為方框,或是不夠清晰。這是由於JRE字型配置不正確所導致的,修改JRE的字型配置檔案可以解決這個問題。

配置檔案位置

JRE的字型配置檔案存放在[1]

# 顯示當前系統中Java字型配置檔名稱:
echo $JAVA_HOME/jre/lib/fontconfig.properties

其中,$JAVA_HOME環境變量表示JRE所在的路徑,在安裝了JAVA環境的系統中,通常已經設定。如在有些系統中$JAVA_HOME

形如/usr/lib/jvm/java-6-sun

Hint.gif 提示: 
對於某些自帶了JRE的軟體,如Matlab等,配置字型時只要將上面的$JAVA_HOME更為其自帶的JRE的路徑即可,如MATLAB中文字型配置

如果這個檔案不存在,可以從fontconfig.properties.src複製一個:

# 本文後續的所有命令可能需要root許可權,請自行新增sudo
cp $JAVA_HOME/jre/lib/fontconfig.properties.src $JAVA_HOME/jre/lib/fontconfig.properties
 
# 有些系統中該檔案是隻讀的……
chmod +w $JAVA_HOME
/jre/lib/fontconfig.properties

為了避免受當前fontconfig配置檔案的影響,備份並移除所有bfc檔案:

mkdir $JAVA_HOME/jre/lib/bfcbak/
mv $JAVA_HOME/jre/lib/*.bfc $JAVA_HOME/jre/lib/bfcbak/

準備字型

首先請確定要使用的字型,如Windows中的宋體、黑體,或Linux中文泉驛正黑體。

接著要找到字型檔案,文泉驛系列字型一般安裝在/usr/share/fonts中包含wqy的某個資料夾中,檔名wqy-zenhei.ttcwqy-zenhei.ttf。宋體則在Windows的分割槽中,一般是WINDOWS\Fonts\simsun.ttc

建議將想用的字型檔案複製(或建立符號連結)到$JAVA_HOME/jre/lib/fonts,後面的配置會簡單一點。

修改配置檔案

開啟配置檔案,如$JAVA_HOME/jre/lib/fontconfig.properties,並對其進行如下操作:

獲取字型定義

到存放有字型檔案的資料夾,如$JAVA_HOME/jre/lib/fonts,執行下述命令[2][3]

# Make font scale
 mkfontscale
 
 # 尋找檔案中含有iso10646的行(對應Unicode類的編碼)
 grep 10646 fonts.scale

會看到這樣的一些行:

simsun.ttc -misc-simsun-medium-r-normal--0-0-0-0-p-0-iso10646-1
wqy-microhei.ttc -misc-wenquanyi micro hei-medium-r-normal--0-0-0-0-p-0-iso10646-1

請複製相應字型對應的行備用。

加入字型定義

version=1後面加入[4](後半部分可按具體使用的字型更改)

allfonts.chinese-arphic1=-misc-simsun-medium-r-normal--0-0-0-0-p-0-iso10646-1

如果原來檔案中還有設定allfonts.chinese-arphic1的,就把它們註釋掉。

指明字型路徑

如果已經把字型複製到$JAVA_HOME/jre/lib/fonts,可以略過此步。否則須在配置檔案中加上字型檔案的完整路徑,以宋體為例:

filename.-misc-simsun-medium-r-normal--0-0-0-0-p-0-iso10646-1=simsun.ttc的完整路徑

修改字型搜尋序列

在配置檔案中查詢sequence.allfonts,如果其後的sequence開頭的行中有chinese-arphics1,可以略過此步,否則在其後面加入一行:

sequence.fallback=chinese-arphic1

解決字顯示不清晰的問題

有時看到英文顯示有鋸齒,有時看到中文字邊緣不清,這可能都與字型反鋸齒的設定不當有關。可以在/etc/profile~/.bashrc末尾加入:[5]

export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=lcd'

其中的lcd也可改為gasp,但效果較好的常是lcd。

相關資料