izpack,一个开源的安装制作工具, Java编写。做出来的东西基本上中规中矩。
使用中碰到不少中文问题,一一解决如下:
1. 中文界面乱码:
修改chn.xml, 这个文件的编码被很奇怪的转码了,试验了半天才搞定。编辑scrapbook page, 评估如下代码:
java.io.File f
=
new
java.io.File(
"
C:\\Program Files\\IzPack\\bin\\langpacks\\installer\\chn.xml
"
);
byte
[] a
=
new
byte
[(
int
)f.length()];
new
java.io.DataInputStream(
new
java.io.FileInputStream(f)).readFully(a);
new
String(
new
String(
new
String(a,
"
GBK
"
).getBytes(),
"
UTF-8
"
).getBytes(
"
ISO8859-1
"
))
碰到这种乱码问题可以使用暴力破解,一般转码不会超过三重,以后类似问题可以采用:
static
String[] encodings
=
{ "GBK", "ISO8859-1", "BIG5", "SHIFT-JIS",
"UTF-8", "UNICODE" }
;

public
static
void
main(String[] args) throws UnsupportedEncodingException
{
String input = "脨露脭脴";

for (int i = 0; i < encodings.length; i++)
{

for (int j = 0; j < encodings.length; j++)
{

for (int k = 0; k < encodings.length; k++)
{
System.out.println(new String(new String(input
.getBytes(encodings[i]), encodings[j])
.getBytes(encodings[k]))
+ "\t"
+ encodings[i]
+ "/"
+ encodings[j]
+ "/"
+ encodings[k]);
}
}
}
}
2. 安装后菜单不出来。
在document and settings\%your account%\下面能看到一个乱码的目录,所以开始菜单上不会出来,桌面上不出来也是这个原因。
原因:ShortLink.dll中没用unicode, 所以中文读出来是GBK,被错误当成ISO8859-1转码了。
解决:尝试在ShortLink.java中取到的乱码字符串重新getBytes后组合,发现有字符丢失,看样转换中有损耗。
最后决定用byte[]传递字符串,在dll中读到的中文按照字节数组传递给Java, Java根据系统属性io.encoding(GBK)编码得到字符串。
折腾了两天终于成功安装了~~~,但是。。。卸载界面还有中文问题。。。faint, 有空再搞吧,小问题了。
碰到的几个小tip:
1. 菜单配置shortcutSpec.xml文件中如果<createForPack name="xxx"/>指定的xxx不存在,不会报错,菜单也不会安装。
2. 如果执行的文件不存在,菜单创建画面会很慢。ShortcutPanel要放到文件好之后执行。
3. 制作安装时如果文件不存在,没有出错提示,屏幕上最后出现的文件名应该就是有问题的。
这里下载提到的补丁文件:http://www.cnblogs.com/Files/steeven/izpack3.7.2_chiese_patch.zip