Java , Installanywhere 在 Redhat 上的中文问题解决方法(转载)

原创 2004年12月30日 18:49:00

在 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” 的苦处。

Java , Installanywhere 在 Redhat 上的中文问题解决方法

在 sun jdk /jre 的多个版本中,对于 Redhat 上的中文支持一直是非常糟糕。对于默认安装(不修改任何...
  • jacklondon
  • jacklondon
  • 2003年05月18日 11:00
  • 3225

自制InstallAnywhere所需的vm

大名鼎鼎的InstallAnywhere安装制作程序可以非常方便的制作出很专业的Java安装程序.而且这个安装程序可跨平台运行.我使用6.1企业版,发布使用了J2SDK1.5开发的程序,由于使用了1....
  • keepeye
  • keepeye
  • 2005年06月22日 20:24
  • 2475

用installAnywhere2009 打包安装java web程序 (详细图表操作)

  点击Sava As 保存后点击Advanced Designer Insatller tilte 安装包的标题 installer name  安装包的名称product name 安装包的目录文...
  • ami121
  • ami121
  • 2009年06月16日 16:00
  • 5098

使用InstallAnywhere7.1制作Java exe程序安装包(转)

老大要我做个程序安装包,网上找个了资料,转载下: 使用InstallAnywhere7.1制作Java exe程序安装包 Java应用程序项目开发测试完成后,企业需要将此包...
  • sybww
  • sybww
  • 2014年04月11日 13:48
  • 939

CSDN如何转载他人文章

利用Markdown可以解析html的特点,我们可以很方便的转载他人的文章。
  • Michael753951
  • Michael753951
  • 2017年04月21日 04:01
  • 519

InstallAnywhere 的一些坑以及workaround

InstallAnywhere是一个挺好用的打包软件的工具,对于简单的需求,只需要鼠标点一点就完全可以达成目标。比如给用户建一些配置页面,然后把这些变量替换到配置文件中等等,但对于一个稍微复杂一点的项...
  • carolwu_1206
  • carolwu_1206
  • 2015年08月21日 15:31
  • 2149

【软件-InstallAnywhere】Java软件打包:将指定的文件创建快捷方式并安装到桌面(工具installanywhere2012)

第一步  创建工程  这里就不介绍了 第二步 进入到脚本编辑界面 第三部 文件安装设置的界面 第四步 加入的工程文件  第五步 添加一个 快捷方式的Action 第六步 修改刚添加A...
  • chenlu5201314
  • chenlu5201314
  • 2013年06月28日 15:15
  • 1009

WebLogic8.1的中文问题解决方法(转载)

作者:周海根(dev2dev论坛id:zhouhg) 长城软件系统有限公司 J2EE架构设计师, 项目经理Web应用中的中文问题1. 静态页面中文信息不能正确显示浏览器端看到中文不能正确显示,首先应该...
  • yukikaze
  • yukikaze
  • 2004年11月26日 16:36
  • 1472

解决启动Install Anywhere卸载程序的“JAVA VM”错误

Install Anywhere安装程序使用了JAVA的虚拟机,因此在启动卸载程序的时候由于找不到JAVA的执行环境而报告“Launch Anywhere Error: Windows error 3...
  • zhmnsw
  • zhmnsw
  • 2007年07月24日 13:36
  • 3743

InstallAnywhere使用与下载

InstallAnywhere 简介(摘自百度百科&VeryCD) 一个为多个平台产生的全方位的安装软件 为多个平台提供解决方案是对软件生产商的一种挑战。许多解决方案都依赖于针对每种目标操...
  • zhanghuoding
  • zhanghuoding
  • 2014年09月08日 12:54
  • 866
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java , Installanywhere 在 Redhat 上的中文问题解决方法(转载)
举报原因:
原因补充:

(最多只允许输入30个字)