Ответ 1
ОК, я получил это, сделав следующее:
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
Workbook workbook = Workbook.getWorkbook(stream, ws);
Я загружаю файл 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 или удалив его), но без успеха.
Может ли кто-нибудь сказать мне, как я могу решить эту проблему.
Спасибо
ОК, я получил это, сделав следующее:
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
Workbook workbook = Workbook.getWorkbook(stream, ws);
WorkbookSettings будет искать системное свойство jxl.encoding
Если у вас нет простого доступа к WorkbookSettings (т.е. из Drools-ExcelParser), вы можете найти это предпочтительным.
Прежде всего, убедитесь, что вы используете последнюю версию 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.