14

我正在使用 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 或将其删除)但没有成功。

谁能告诉我如何解决这个问题。

谢谢

4

3 回答 3

35

好的,我这样做了:

WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
Workbook workbook = Workbook.getWorkbook(stream, ws);
于 2011-04-18T12:12:31.353 回答
3

WorkbookSettings 将查找系统属性 jxl.encoding

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

于 2012-01-24T11:02:06.973 回答
-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 内。

于 2011-04-18T11:40:35.270 回答