首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
wangchinaking (57)
yjz0065 (113)
coofucoo (105)
Drate (69)
lphpc (30)
smallnest (61)
iiprogram (64)
downmoon (32)
danny_xcz (49)
btbtd (81)
CSDN - 文档中心 - Java 阅读:4948   评论: 5    参与评论
标题   Java , Installanywhere 在 Redhat 上的中文问题解决方法     选择自 jacklondon 的 Blog
关键字   Java,Installanywhere,Redhat,中文问题,解决方法
出处  

在 sun jdk /jre 的多个版本中,对于 Redhat 上的中文支持一直是非常糟糕。对于默认安装(不修改任何配置文件)、Java 代码中使用默认字体(不使用 setFont )的情况下,中文汉字总是出不来。在 windows 和 solaris 上则比较少出现这种情况。

有一种说法是 Sun 和 Redhat 是某种竞争关系,对于 Sun 公司来说,只要 Java 在 Solaris 和 Windows 上能够跑,其他操作系统都是多余的;只要 Java 在Solaris 上运行比在 Windows 上运行更好, Windows 也是多余的。正是这种敌视的态度,使得 Java 在非 Solaris 的操作系统上使用时要么中文不能出来,要么极其难看。

不管这种说法是否属实,Sun 没有解决 Java 在 Redhat 上的中文问题,给很多 Java 程序员带来极大的不便。 Sun 自己的网站上也有很多人问到这个问题,但是很少有人提供较好的解决方法,让人感到遗憾。

前一阵子我在使用 Installanywhere 制作在 Redhat 上运行的安装程序时,中文安装界面老是方块块,我将 Installanywhere 网站上所有的 Java VM 逐个试了一遍还是不行,我将 Installanywhere 网站上的讨论组基本上全部看过来,还是找不到解决方法,令我简直怀疑自己的智商。因此下决心查查 Java 在 Redhat 上的中文问题。

我首先向 Installanywhere 的中国一个代理商问起这个问题,他支支吾吾,只是说 Installanywhere 一定支持 Redhat 上的中文安装程序制作。多次电话来往后,我大概听明白了, Sun 不太希望 Installanywhere 在 Redhat 上有较好的表现,所以 Installanywhere 他们不能在网站上公开解决方法,他推荐我们用 Solaris。我说我们用不起 Solaris,然后就没有实质的进展。

我在 google 、中文 yahoo 上搜索了好几个星期都没有结果,但是有了一些资料。后来我到 Redhat 公司网站上搜索,又找到了一些资料。然后自己试了几次,终于搞定。

标准 jre/jdk 中只带了 redhat 6 的 font.properties, 我在 redhat 7.3 和 redhat 8.0 上都不能用。我们需要建一个 font.properties.zh.Redhat 放在 redhat 的 jre/lib 目录下。打开 /usr/lib/X11/fonts/ttf-zh 或者 /usr/share/fonts/zh_CN/TrueType 下面的 font.dir, 将其中的一个中文字体名复制下来,比如 -misc-ZYSong18030-medium-r-normal--0-0-0-0-c-0-iso10646-1,按照 java 的字体规则改为 -misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1,将 font.properties.zh 中的内容复制到 font.properties.zh.Redhat 中。

我选用字体 -misc-ZYSong18030-medium-r-normal--0-0-0-0-c-0-iso10646-1 是因为在 redhat 7.3 和 redhat 8.0 上都能用。

因为 jre/jdk 找不到 Redhat 的 true type 字体,在文件 font.properties.zh.Redhat 最后加入

appendedfontpath=/usr/lib/X11/fonts/ttf-zh
appendedfontpath=/usr/share/fonts/zh_CN/TrueType

将字体名全部替换成 -misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1,替换后的 font.properties.zh.Redhat 如下:

# @(#)font.properties.zh.Redhat.linux 1.4 02/06/10
#
# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
#

# Component Font Mappings
#
serif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

serif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

serif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

serif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

sansserif.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

monospaced.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialog.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1


dialog.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialog.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialog.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.italic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.bold.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

dialoginput.bolditalic.0=-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1
# Missing Glyph Character
#
default.char=274f

# Component Font Character Encodings
#
fontcharset.serif.0=sun.io.CharToByteISO8859_1
fontcharset.serif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.sansserif.0=sun.io.CharToByteISO8859_1
fontcharset.sansserif.1=sun.awt.motif.CharToByteX11GBK

fontcharset.monospaced.0=sun.io.CharToByteISO8859_1
fontcharset.monospaced.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialog.0=sun.io.CharToByteISO8859_1
fontcharset.dialog.1=sun.awt.motif.CharToByteX11GBK

fontcharset.dialoginput.0=sun.io.CharToByteISO8859_1
fontcharset.dialoginput.1=sun.awt.motif.CharToByteX11GBK

# Exclusion Ranges
#

# XFontSet Information
#
fontset.serif.plain=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.italic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.bold=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.serif.bolditalic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.plain=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.italic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.bold=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.sansserif.bolditalic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.plain=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.italic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.bold=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.monospaced.bolditalic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.italic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.bold=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.bolditalic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialog.plain=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.italic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.bold=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.bolditalic=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

fontset.dialoginput.plain=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

#fontset.default=\
#-b&h-lucida-medium-r-normal-sans-*-%d-*-*-p-*-iso10646-1,\
#-tlc-song-medium-r-normal--*-%d-*-*-c-*-gbk-0

fontset.default=\
-misc-ZYSong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1

appendedfontpath=/usr/lib/X11/fonts/ttf-zh
appendedfontpath=/usr/share/fonts/zh_CN/TrueType

使用 Installanywhere 我们编译安装程序选择 “其它 java 平台” 编译成一个 java 的 setup.jar 文件,在 Redhat 上面写一个批处理/脚本文件, set classpath , 包含 setup.jar, 批处理/脚本文件中使用 java install 启动安装程序。

这个方法在 redhat 7.3/ 8.0 下面测试通过。

对于 Redhat 上面的繁体中文依法炮制即可,建立 font.properties.zh_TW.Redhat 文件,将其中的字体名改为一个繁体中文字体名,在文件末尾加上合适的 appendedfontpath ,当然最后不要忘了在 Redhat 7.3 和 8.0 下面都测试一遍。

Linux 的不同版本配置方法不一样。主要是因为 Linus Torvalds 等有说话分量的人只专注在 Linux 内核开发上。如果他们对于其他方面略做规划,Linux 的不同版本差别不至于像现在这么大。在 Java + Linux 的使用过程中,我们深深地体会到了 “Write once, debug everywhere” 的苦处。


相关文章
对该文的评论
CSDN 网友 ( 2005-05-15)
谢谢了,已经解决
jacklondon ( 2005-01-18)
我的邮箱是 jacklondon.chen@tom.com
如果你在 jBuilder 里工程属性里设置了vm parameters参数,那么你应该做一个启动批处理文件, .bat(Windows) 或者 .sh(Linux/Unix),在批处理文件中调用 java xxx, 用 java.exe 的命令行参数 -D。
liyongxuan ( 2004-10-24)
(找不到你的邮箱,只好在这里问了)小弟在jBuilder里工程属性里设置了vm parameters参数,在用InstallAnyWhere(4。5)的时候在什么地方设置呢?在(4.5)里的Install步骤, 有个Edit propetry的按钮,点击后,可以加如属性的,但是我不知道那个属性对应vm parameters的,请高手指教 另外,请问,是不是只在这里加入属性和对应的值就可以了?
jacklondon ( 2004-03-03)
当然上面的话有点偏激,不过确实我认为 Sun 的测试不如 Microsoft.
如果 Microsoft 的某个产品决定在某个操作系统上运行的话,他们会在安装、运行等各个方面测试。让用户点几下鼠标即可。
jacklondon ( 2003-05-19)
请多指教