Debian下NetBeans中文字体显示为方块的解决方法
本文转载自:http://blog.csdn.net/tanghw/article/details/4380534
在Debian下安装NetBeans,中文字体显示为方块。这是因为NetBeans调用了JDK的字体设置而造成的,因此,要解决这个问题,需设置好JDK的中文字体环境。
笔者的JDK的安装路径在/usr/local/jdk1.6.0_14/下,以下简称为"${JDK_HOME}"。JDK自带了几种字体,在${JDK_HOME}/jre/lib/fonts下面,全是英文字体。当需要显示中文时,JDK实际上是到用户所安装的中文路径下去寻找。NetBeans通过fontconfig的文件来定义了这种寻找字体的规则。这个文件就在${JDK_HOME}/jre/lib下面。打开该目录,下面有好几个Linux系统下的字体配置文件,如fontconfig.RedHat.x.x.properties.bfc, fontconfig.RedHat.x.x.properties.src, fontconfig.Sun.properties.bfc, fontconfig.Sun.properties.src, fontconfig.SuSE.properties.bfc, fontconfig.SuSE.properties.src, fontconfig.Turbo.properties.bfc, fontconfig.Turbo.properties.src等。.bfc是二进制文件,而.src是源文件。Sun的工程师不爱Debian,因此没有为Debian用户预设一个字体配置文件。我们现在就来打造它。
检查${JDK_HOME}/jre/lib下面有没有一个名为fontconfig.properties的文件,如果已有,请先将其备份:
cd /usr/local/jdk1.6.0_14/jre/lib
sudo cp fontconfig.properties fontconfig_bak.properties
之后,在当前路径下,
sudo cp fontconfig.properties.src fontconfig.properties
将fontconfig.properties.src复制为fontconfig.properties,打开该文件以编辑:
sudo gedit fontconfig.properties
其内容如下:
# @(#)linux.fontconfig.properties 1.2 03/10/28
#
# Copyright 2003 Sun Microsystems, Inc. All rights reserved.
#
# Version
version=1
# Component Font Mappings
serif.plain.latin-1=-b&h-lucidabright-medium-r-normal--*-%d-*-*-p-*-iso8859-1
serif.bold.latin-1=-b&h-lucidabright-demibold-r-normal--*-%d-*-*-p-*-iso8859-1
serif.italic.latin-1=-b&h-lucidabright-medium-i-normal--*-%d-*-*-p-*-iso8859-1
serif.bolditalic.latin-1=-b&h-lucidabright-demibold-i-normal--*-%d-*-*-p-*-iso8859-1
sansserif.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
sansserif.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
sansserif.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
sansserif.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
monospaced.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
monospaced.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
monospaced.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1
monospaced.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1
dialog.plain.latin-1=-b&h-lucidasans-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1
dialog.bold.latin-1=-b&h-lucidasans-bold-r-normal-sans-*-%d-*-*-p-*-iso8859-1
dialog.italic.latin-1=-b&h-lucidasans-medium-i-normal-sans-*-%d-*-*-p-*-iso8859-1
dialog.bolditalic.latin-1=-b&h-lucidasans-bold-i-normal-sans-*-%d-*-*-p-*-iso8859-1
dialoginput.plain.latin-1=-b&h-lucidatypewriter-medium-r-normal-sans-*-%d-*-*-m-*-iso8859-1
dialoginput.bold.latin-1=-b&h-lucidatypewriter-bold-r-normal-sans-*-%d-*-*-m-*-iso8859-1
dialoginput.italic.latin-1=-b&h-lucidatypewriter-medium-i-normal-sans-*-%d-*-*-m-*-iso8859-1
dialoginput.bolditalic.latin-1=-b&h-lucidatypewriter-bold-i-normal-sans-*-%d-*-*-m-*-iso8859-1
# Search Sequences
sequence.allfonts=latin-1
# Exclusion Ranges
# Font File Names
首先,在# Component Font Mappings之行下加上:
allfonts.chinese-cn-iso10646=-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
该行以JDK规范的格式定义了一个名为chinese-cn-iso10646的全局字体。
然后,在sequence.allfonts=latin-1之行下加下:
sequence.allfonts.UTF-8.zh.CN=latin-1,chinese-cn-iso10646
sequence.fallback=chinese-cn-iso10646,lucida
意为在UTF-8.zh.CN的环境下,加载latin-1,chinese-cn-iso10646的字体。如果找不到,则使用chinese-cn-iso10646,lucida的字体。chinese-cn-iso10646出现了两次,因为我们确实不希望漏掉它。多个机会容易成功。:)
为什么要使用UTF-8.zh.CN?打开一个终端,输入
echo $LANG
笔者的Debian上就显示出“zh_CN.UTF-8”,如果您的电脑不是,请作相应修改。注意把顺序调用为相反的,即sequence.allfonts.UTF-8.zh.CN。
下面将字体名称与实际字体文件挂钩起来。在最后一行# Font File Names下,加上:
filename.-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1=/usr/share/fonts/truetype/arphic/gbsn00lp.ttf
=号左边为字体名称,右边为实际的字体文件。这是一个宋体字体文件。如果您的系统此路径下没有该字体文件,您只好亲自去找了,找到后变更为实际路径及文件名即可。Songzi Blog (http://www.songzi.org/blog/article.asp?id=204) 介绍了获取几种中文字体的方法,感兴趣的可去试试。
最后一步,还要告诉JDK这个字体的存放路径。
awtfontpath.chinese-cn-iso10646=/usr/share/fonts/truetype/arphic
存盘后启动NetBeans,方块不见了,代之的是久违的汉字。