JExcel中的编码问题

时间:2011-04-18 10:46:31

标签: java google-app-engine servlets encoding jexcelapi

我正在使用JExcel在GAE / Java应用程序中加载excel文件,如下所示:

上传文件的html表单就像这样:

<form id="" action="/save" method="post" enctype="multipart/form-data" accept-charset="ISO-8859-1">
    <input name="file" type="file" value="load"/>
    <input type="submit"value="load excel"/>
</form>

在服务器中我有:

ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
    FileItemStream item = iterator.next();
    InputStream stream = item.openStream();
    if (!item.isFormField()) {
        //if it's not a form field it's a file

        Workbook workbook = Workbook.getWorkbook(stream);
        ...
        String name = sheet.getCell(COL_NUMBER, row).getContents();
    }
}

问题在于,如果我在单元格中写入“cityó”,当它在服务器中读取变量名称为“ city?”时。编码不正常。

我尝试更改accept-charset =“ISO-8859-1”(将其设置为utf-8或删除它)但没有成功。

任何人都可以告诉我如何解决这个问题。

由于

3 个答案:

答案 0 :(得分:33)

好的,我这样做了:

WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
Workbook workbook = Workbook.getWorkbook(stream, ws);

答案 1 :(得分:3)

WorkbookSettings将查找系统属性jxl.encoding

如果您无法轻松访问WorkbookSettings(即来自Drools- ExcelParser),您可能会发现这更适合。

答案 2 :(得分:-2)

首先,请确保您使用的是最新版本的POI(类似于3.7或3.8 beta 2)。非常旧版本的POI确实存在编码问题,但只要您使用的是新版本,那么这不应该是您的问题。

接下来,在本地计算机上,针对该文件运行类似org.apache.poi.hssf.extractor.ExcelExtractor的内容。这将让您确认POI正确处理编码。用

运行它
java -classpath poi-3.8-beta2.jar org.apache.poi.hssf.extractor.ExcelExtractor --show-sheet-names Y -i MyExcel.xls

假设工作正常,那么您就知道自己的问题出在Google App Engine中。