我需要在日文系统下,读取一个用日文excel编辑过的保存有中文的excel文件,文件就一个sheet,sheet中单元格里面保存有中文和数字,单元格格式都是字符串。代码如下: public static void ReadExcel2(String file) {
int total = 0;
try {
PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("testout1.txt")));
PrintWriter out3 = new PrintWriter(new BufferedWriter(new FileWriter("testout3.txt")));
HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
int sn = wb.getNumberOfSheets();
for (int i = 0; i < sn; i++) {
HSSFSheet sheet = wb.getSheetAt(i);
for (int j = 0; j <= sheet.getLastRowNum(); j++) {
HSSFRow row = sheet.getRow(j);
for (int k = 0; k < row.getLastCellNum(); k++) {
HSSFCell cell = row.getCell((short) k);
if (cell != null) {
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
out1.println(cell.getStringCellValue());
out3.println(new String(cell.getStringCellValue().getBytes("GB2312")));
System.out.println(str);
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
System.out.println(cell.getNumericCellValue());
} else if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
System.out.println("BLANK");
} else {
System.out.println(cell.getBooleanCellValue());
}
} else {
System.out.println("NULL");
}
total++;
}
}
}
System.out.println(total);
out1.close();
out3.close(); } catch (Exception e) {
System.out.println(e.getStackTrace());
}
}
在程序运行时,debug跟踪 cell.getStringCellValue() 方法,看到它每次显示的内容都是excel单元格的内容,并且没有乱码,在输出时,没有做转换,直接输出时,out1那个对应的文件中,编码模式显示为shift-JIS,并且一部分文字为“?”。
out3对应的那个文件,在用gb2312编码模式读取并表示时候有一部分文字变成乱码,一部分正常显示,如下:越野车(驰?,大卡车(解放)一
工业?交嵘缫焕
初级阶段一
轴承采用的是碟式制效果很好一
其中的乱码是一部分,另一部分显示正常。没有什么规律。谁能帮我看看这个问题出在哪?我想以GB2312模式打开这个文件,并且不显示乱码谢谢

解决方案 »

  1.   

    testout3.txt
    这个文件你用word打开,打开的时候会问你用哪个字符集(默认就是GB2312)。
    这样应该就不会有乱码了。
      

  2.   

    这个问题其实重要是操作系统的原因,比如是含中文的文本文档,你在保存的时候最好使用UTF-8的形式另保存一次,读取的时候,规定读取的编码格式也是UTF-8就不会出现问题了。
      

  3.   

    楼主,你这样编码肯定是要乱码的
    用sjis编码,再用gbk解读,而且还有用java写出文件,java又是unicode
    然后文件里还有日文和汉语用日文的sjis编码中文,怎末能不乱码呢
    回读的时候还要用gbk,那日文又要乱码了