Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用POI解析Excel文件中的UTF-8字符_Java_Excel_Utf 8_Apache Poi_Cjk - Fatal编程技术网

Java 如何使用POI解析Excel文件中的UTF-8字符

Java 如何使用POI解析Excel文件中的UTF-8字符,java,excel,utf-8,apache-poi,cjk,Java,Excel,Utf 8,Apache Poi,Cjk,我一直在使用POI成功解析XLS和XLSX文件。但是,我无法从Excel电子表格中正确提取特殊字符,例如UTF-8编码字符,如中文或日文。我已经找到了如何从UTF-8编码的csv或制表符分隔的文件中提取数据的方法,但对于Excel文件来说运气不佳。有人能帮忙吗 (编辑:注释中的代码段) HSSFSheet sheet=workbook.getSheet(工作表); HSSFEevaluation工作簿ewb=HSSFEevaluation工作簿.create(工作簿); 而(rowCtr我在从E

我一直在使用POI成功解析XLS和XLSX文件。但是,我无法从Excel电子表格中正确提取特殊字符,例如UTF-8编码字符,如中文或日文。我已经找到了如何从UTF-8编码的csv或制表符分隔的文件中提取数据的方法,但对于Excel文件来说运气不佳。有人能帮忙吗

编辑:注释中的代码段)

HSSFSheet sheet=workbook.getSheet(工作表);
HSSFEevaluation工作簿ewb=HSSFEevaluation工作簿.create(工作簿);

而(rowCtr我在从Excel文件中提取波斯语文本时遇到了同样的问题。我使用Eclipse,只需转到Project->Properties并将“文本文件编码”更改为UTF-8即可解决问题。

在POI中,您可以这样使用:

Workbook wb = new HSSFWorkbook();
Sheet sheet = wb.createSheet("new sheet");

// Create a row and put some cells in it. Rows are 0 based.
Row row = sheet.createRow(1);

// Create a new font and alter it.
Font font = wb.createFont();
font.setCharSet(FontCharset.ARABIC.getValue());
font.setFontHeightInPoints((short)24);
font.setFontName("B Nazanin");
font.setItalic(true);
font.setStrikeout(true);

// Fonts are set into a style so create a new one to use.
CellStyle style = wb.createCellStyle();
style.setFont(font);

// Create a cell and put a value in it.
Cell cell = row.createCell(1);
cell.setCellValue("سلام");
cell.setCellStyle(style);

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

并且可以在FontCharset中使用另一个字符集,使用UTF获取字节,如下所示

cell.getStringCellValue().getBytes(Charset.forName("UTF-8"));

解决方案很简单,可以读取任何编码的单元格字符串值(非英语字符);只需使用以下方法:

sValue = cell.getRichStringCellValue().getString();
而不是:

sValue = cell.getStringCellValue();
这适用于UTF-8编码字符,如汉语、阿拉伯语或日语


p.S如果任何人正在使用命令行实用程序nullpunkt/excel to json,该实用程序使用“Apache POI”库,请通过替换出现的“getStringCellValue()”来修改文件转换器/ExcelToJsonConverter.java,以避免将非英语字符读取为“?”.

您能指出您正在使用的POI API的部分吗?或者向我们展示一些代码吗?这将帮助我们推荐API更改和/或有助于调试的诊断。Excel不将字符存储为UTF-8,因此我认为您可能在某个地方感到困惑…下面是一个代码片段:
HSSFSheet sheet=workbook.getSheet(工作表);HSSFEevaluation工作簿ewb=HSSFEevaluation工作簿.create(工作簿);而(rowCtr所有日志条目都返回垃圾,即-非中文字符我不知道如何将屏幕截图或保存在excel文件中的中文字符excel文件附加到excel文件中,因此您只需相信我的话,可以将中文字符存储在excel文件中。这应该是公认的答案。谢谢,它可以工作:)
sValue = cell.getStringCellValue();