java - Problema de codificación en JExcel
google-app-engine servlets (3)
Estoy cargando un archivo de Excel en una aplicación GAE / Java con JExcel de esta manera:
El formulario html para subir el archivo es así:
<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>
y en el servidor tengo:
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();
}
}
El problema es que si escribo en la celda algo así como '' ciudad ó '' cuando se lee en el servidor, ¿el nombre de la variable es '' ciudad '' ? ''. La codificación no está bien.
Intenté cambiar accept-charset = "ISO-8859-1" (configurándolo en utf-8 o quitándolo) pero sin éxito.
¿Alguien puede decirme cómo podría resolver este problema?
Gracias
OK, lo tengo haciendo esto:
WorkbookSettings ws = new WorkbookSettings();
ws.setEncoding("Cp1252");
Workbook workbook = Workbook.getWorkbook(stream, ws);
Primero, asegúrese de estar usando una versión reciente de POI (algo así como 3.7 o 3.8 beta 2). Las versiones muy antiguas de POI tenían problemas de codificación, pero siempre y cuando estés en una nueva, ese no debería ser tu problema.
A continuación, en su equipo local, ejecute algo como org.apache.poi.hssf.extractor.ExcelExtractor en el archivo. Esto le permitirá confirmar que POI maneja la codificación correctamente. Ejecutarlo con
java -classpath poi-3.8-beta2.jar org.apache.poi.hssf.extractor.ExcelExtractor --show-sheet-names Y -i MyExcel.xls
Suponiendo que funciona bien, entonces sabes que tu problema está dentro de Google App Engine.
WorkbookSettings buscará la propiedad del sistema jxl.encoding
Si no tiene fácil acceso a WorkbookSettings (es decir, proveniente de Drools-ExcelParser), puede encontrar esto preferible.