Java程序中文字體配置

此頁由 Linux Wiki用戶Chenxing 於 2012年12月18日 (星期二) 08:01 的最後更改。 在lzh的工作基礎上。

從 Linux Wiki

提示:此文已超过 12 年(4389 天)未更新,如发现内容过时或有误,欢迎改进:)

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。

相關資料

  1. Sun網站上對fontconfig的介紹
  2. http://www.builder.com.cn/2008/0619/935502.shtml
  3. http://hiei.yeax.com/archives_48.html
  4. http://blogs.sun.com/wind/entry/linux%E4%B8%8Bjava%E7%9A%84%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E8%AE%BE%E7%BD%AE
  5. http://wiki.archlinux.org/index.php/Java_Fonts_-_Sun_JRE

本文对您有帮助?分享给更多朋友!

反馈与讨论

发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。
個人工具
简体繁体转换