【问题标题】:Encoding problem in JExcelJExcel中的编码问题
【发布时间】:2011-08-07 18:54:57
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 您如何确定服务器上的名称?我假设上传时的编码被忽略(我想它是二进制数据)。你检查过实际的字符串字符吗?字符串可能是正确的,但您只是在字符无法正确显示的地方打印它。
  • @jtahlborn 我将其保存在数据存储中。我注意到它存在编码问题,因为我有另一种方法可以下载数据存储中的数据。我注意到下载的数据不正确,所以我调试并看到在字符串变量名中它正在读取编码错误的数据,所以它被错误地保存等等。当调用 getContents() 方法时,问题就开始了。
  • 您可能想研究 poi 如何确定文件字符编码。据我所知,GAE 的默认文件编码是“ascii”。如果 poi 依赖于默认文件编码,您可能会遇到问题。

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


【解决方案1】:

好的,我这样做了:

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

【讨论】:

    【解决方案2】:

    WorkbookSettings 将查找系统属性 jxl.encoding

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

    【讨论】:

      【解决方案3】:

      首先,确保您使用的是最新版本的 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 内。

      【讨论】:

      • 很抱歉,我有几个项目,而这个没有使用 Apache POI。它正在使用 JExcel。
      猜你喜欢
      • 2013-11-08
      • 2016-08-14
      • 2011-02-18
      • 2014-06-06
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多