java excel 中文乱码_java中读取excel文件中字符串乱码问题解决方法

以前的时候发现直接java读取一个excel文件输出里面的字符串会乱码,中文字符不会乱码,但是遇到英文的时候输出会乱码。这个问题太奇怪了。

我的表格名字为Shirley.xls。

我曾经直接读取excel表格中那个有英文字符串的单元格

Workbook book = Workbook.getWorkbook(new File("D:\\excel\\Shirley.xls"));

// 获得第一个工作表对象

Sheet st = book.getSheet(0);

// 得到单元格

System.out.println(st.getColumns());

Cell c1 = st.getCell(1,11);

String name = c1.getContents().replaceAll(" ", "");

System.out.println(name);

book.close();

打印的时候输出:�Shirley;

显然这个单元格在读取的时候有问题,编码格式不对。

开始的时候我尝试将这个字符串name编码转换,String s1 = new String(name.getBytes("GBK"),"UTF-8");

但是输出还是会有问题: ?Shirley.

解决方法一:

查阅网上资料发现在读取excel的时候一开始设置好读取的编码方式就能解决中文乱码,那这个对于英文乱码会不会有效呢?

于是修改了以上读取excel时候的代码:

WorkbookSettings workbookSettings = new WorkbookSettings();

workbookSettings.setEncoding("ISO-8859-1");

Workbook book = Workbook.getWorkbook(new File("D:\\excel\\Shirley.xls"),workbookSettings);

打印输出正常:Shirley.

--------------------------------------------

解决方法二:

你也可以不修改初始读取excel的编码方式,在读取String name = c1.getContents().replaceAll(" ", "");

的时候将name的最开始一个字节截掉,这样就也能显示正常,

注意是截掉一个字节,不是一个字符,如果用String方式截掉最前面一个字符,显示就为:hirley。

public static String cutOneByte(String str) {

if (str != null && !str.equals("")) {

byte[] a = str.getBytes();// 转化为字节流处理,去掉最前面一个字节,以防止第一个字母乱码

byte[] b = new byte[a.length - 1];

for (int i = 1; i < a.length; i++) {

b[i - 1] = a[i];

}

str = new String(b);

}

return str;

}

用以上方法:

name = name.cutOneByte(name);

这样子处理过后name也能显示正常了。不过没有第一种方法好。

在中文的情况下没有出现乱码现象,就是说当采用默认编码的方式读取excel的数据时候是用UTF-8方式读取的数据(我的eclipse平台采用UTF-8编码),中文字符没有受到影响。为什么在UTF-8方式下读取英文字符串的时候会乱码呢,我这边第二种方法显示这个英文字符在utf-8下读取的时候最前面有一个字节和英文字符s结合后产生了乱码,但是不明白这个导致乱码的字节有什么作用在excel中。我怀疑最大的可能是excel中排版以及格式问题导致的。

你可能感兴趣的:(java,excel,中文乱码)