Проблема кодирования в JExcel

Я загружаю файл excel в приложение GAE/Java с помощью JExcel следующим образом:

Форма 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 not a form field it a file

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

Проблема в том, что если я пишу в ячейке что-то вроде " city -", когда он читает на сервере, имя переменной " city?". Кодировка не в порядке.

Я попытался изменить accept-charset = "ISO-8859-1" (установив его на utf-8 или удалив его), но без успеха.

Может ли кто-нибудь сказать мне, как я могу решить эту проблему.

Спасибо

Ответы

Ответ 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.