上兵伐谋

“上兵伐谋,其次伐交,其次伐兵,其下攻城”。
posts - 35, comments - 32, trackbacks - 0, articles - 3

Sun公司的JRE(JAVA运行库)1.5.0版采用的字体设置方案跟1.4.2版的相去甚远。如果设置不当,Java程序中的中文会表现为方格。
本文给出了一般性的字体设置方法。

首先介绍一下其字体配置文件的加载方案。其加载顺序为(JavaHome指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
其中,OS字段可以是:
Windows: "98", "2000", "Me", "XP", "2003"。
Solaris:空。
Linux: "Sun", "RedHat", "Turbo", "SuSE"。
而Version字段指该OS的版本号。

在这些配置文件中,仅.properties文件是文本文件。其格式跟JRE1.4.2版的不同。文件分为几段,并在每段开始时标明。
我们需要关注的仅有两段:Component Font Mappings和Search Sequences。
前者指定字体,后者指定要使用的properties的搜索顺序。
知道了这些,配置起来就简单了。

首先,必须先把字体文件(这里用宋体Simsun.ttf)拷贝到JRE的字体目录JavaHome/lib/fonts下,然后编辑字体目录下的文件fonts.dir,把第一行的数字加1,然后在最后加一行,写上:
simsun.ttf -SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
然后保存。

然后,转到目录JavaHome/lib下,随便找一个.properties.src文件,用文本编辑器打开,并编辑如下:

# @(#)linux.fontconfig.SuSE.properties 1.2 03/10/17
#
# Copyright 2003 Sun Microsystems, Inc. All rights reserved.
#

# Version

version=1

# Component Font Mappings

serif.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
serif.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
serif.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
serif.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
sansserif.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
sansserif.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
sansserif.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
sansserif.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
monospaced.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
monospaced.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
monospaced.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
monospaced.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialog.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialog.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialog.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialog.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialoginput.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialoginput.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialoginput.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0
dialoginput.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0

# Search Sequences

sequence.allfonts=zh-1

# Exclusion Ranges

# Font File Names


然后按照上面所述的文件名格式保存在这个目录下。如Redhat系统的就保存为fontconfig.RedHat.properties, WindowsXP的就保存为fontconfig.XP.properties,以此类推。

现在,启动Java程序看看,漂亮的JRE1.5的中文界面是不是出来了?

参考资料:

Sun公司对JRE1.5.0版的中文字体设置的官方说明:
http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html

Feedback

# re: Sun JRE 1.5.0版的中文字体设置  回复  更多评论   

2005-11-04 18:30 by Kylin Bell
当然在SuSE下有着更简单的解决办法

:)
只有注册用户登录后才能发表评论。