JDK/JRE 中文字体设置

http://java.sun.com/ 上下载 Java Development Kit (JDK) 或 Java Runtime Environment (JRE) 的安装包,在 Linux 系统上安装后,运行图形界面程序时,中文字符通常显示为方框。这是因为安装包里对中文系统的缺省配置跟系统的中文字体状况不匹配。

按 Sun 的文档描述,一个操作系统的字体配置文件,根据下列信息来确定:

  • JavaHome – JRE 的目录
  • OS – 表示操作系统的种类的字符串:
    • 对 Windows,为 “98″, “2000″, “Me”, “XP”, “2003″.
    • 对 Solaris,为空.
    • 对 Linux,为 “Sun”, “RedHat”, “Turbo”, “SuSE”.
  • Version – 表示操作系统版本的字符串

JRE 使用按下列顺序第一个找到的文件作为系统的字体配置文件:

JavaHome/lib/fontconfig.OS.Version.properties
JavaHome/lib/fontconfig.OS.Version.bfc
JavaHome/lib/fontconfig.OS.properties
JavaHome/lib/fontconfig.OS.bfc
JavaHome/lib/fontconfig.Version.properties
JavaHome/lib/fontconfig.Version.bfc
JavaHome/lib/fontconfig.properties
JavaHome/lib/fontconfig.bfc

上面的文件以 .properties 为扩展名的为文本文件,以 .bfc 结尾的是二进制文件。

按照这个文档的说明,我们可以按照下面的方法来配置中文字体。

1、确定系统的发布版类型,判别方法是 /etc 目录下的 release 文件:

/etc/redhat-release => RedHat
/etc/sun-release => Sun
/etc/turbolinux-release => Turbo
/etc/SuSE-release => SuSE

按这种判断方法,Fedora 等发源于 RedHat 的发布版都属于 RedHat 类。如果 /etc 目录下不存在上面 4 个文件的任何一个,则 OS 为空。

2、拷贝 JavaHome/lib/fontconfig.OS.properties.src 为 JavaHome/lib/fontconfig.OS.properties。如对于 Fedora:

# cp fontconfig.RedHat.properties.src fontconfig.RedHat.properties

对于不属于上面 4 类的发布版,不妨拷贝 RedHat 的配置文件为 fontconfig.properties:

# cp fontconfig.RedHat.properties.src fontconfig.properties

3、编辑上述 .properties 文件,在文件的“Font File Names”一节里,找到在下面一行:

filename.-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/chinese/TrueType/zysong.ttf

将“=”号以后的中文字体文件名,改为本系统上存在的一个中文字体文件名。您如果愿意,可以修改其他几行,为繁体中文、日语、韩语等您可能用到的语言设置合适的字体。

经过这么简单的修改,Java 的图形界面程序就可以正确地显示中文了。

上面介绍的是设置中文字体的标准的做法。另外,还有一个“偷懒”的做法。这就是:不需要修改任何文件,只要创建一个新目录:

JavaHome/lib/fonts/fallback/

然后把中文字体的 TTF 文件拷贝到这个目录里就 OK 了!


留下评论