公司要做一个txt2xls的小程序,连界面都不需要,我用jxl写了不到100行代码搞定。
但是我的环境是windwos的,而同事到山东出差,运行环境是unix(IBM AIX)的,程序就出了问题,在win下怎么折腾都好使,而在unix下怎么折腾都是乱码。
我先上网查了下,有的说jxl在jdk1.42_x的部分jvm上会出现编码问题,建议换jdk;
有的说这样解决:
WorkbookSettings workbookSettings = new WorkbookSettings();
workbookSettings.setEncoding("ISO-8859-1"); //解决中文乱码,或GBK
Workbook rwb = Workbook.getWorkbook(is, workbookSettings);
还有的说这样解决:
引用
在jxl源代码时发现public static String getUnicodeString(byte[] d, int length, int pos)这个方法return后出现乱码。
也就是说还是编码问题,我用的jxl是2.6.5,jdk是1.4,找到jxl源码jxl.biff包下StringHelper这个类。
找到:public static String UNICODE_ENCODING = "unicodelittle";
这句代码改为:public static String UNICODE_ENCODING = "utf-16LE";
在jxl.read.biff包下找到BoundsheetRecord这个类,在public BoundsheetRecord(Record t)这个方法下name = new String(bytes);这句代码改为:
try {
name = new String(bytes,"UTF-16LE");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
name="error";
}
………………
但是最终都没能解决问题,最后我们是这样解决的:
java -Ddefault.client.encoding=GBK -Dfile.encoding=GBK -Duser.language=Zh
即在运行java进程时指定编码,终于又搞定了。