tutorial poi org example java xml apache-poi

java - example - org.apache.poi.xssf jar



MalformedByteSequenceException: Byte no vĂ¡lido 2 de la secuencia UTF-8 de 2 bytes (6)

Tengo un archivo xml que contiene caracteres árabes. Cuando intento analizar un archivo, surge la excepción, MalformedByteSequenceException: Byte no válido 2 de la secuencia UTF-8 de 2 bytes. Uso POI DOM para analizar el documento.

El registro es,

2012-03-19 11:30:00,433 [ERROR] (com.infomindz.remitglobe.bll.remittance.BlackListBean) - Error com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence. at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source) at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source) at javax.xml.parsers.DocumentBuilder.parse(Unknown Source) at com.infomindz.remitglobe.bll.remittance.BlackListBean.updateGeneralBlackListDetail(Unknown Source) at com.infomindz.remitglobe.bll.remittance.schedulers.BlackListUpdateScheduler.executeInternal(Unknown Source) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) at org.quartz.core.JobRunShell.run(JobRunShell.java:216) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)

La excepción solo se produce en Windows Machine, no en Linux Machine. ¿Cómo puedo resolver el problema? Cualquier sugerencia debe ser apreciable.


Creo que su analizador espera un byte codificado en UTF-8 y lo recibe en una codificación diferente. Compruebe la codificación del archivo.

Una posible solución puede ser convertir el archivo a UTF-8.

Si tienes un sistema Unix, puedes usar esta herramienta

iconv -f original_charset -t utf-8 your_file > new_file


Este es un carácter de documento de inicio basado en el sistema operativo. Debe usar un visor de bytes y eliminarlo de su documento. Puedes intentar usar algo como unix2dos para convertir caracteres de control.


He resuelto el problema creando el archivo XML utilizando el formato UTF8.

OutputStreamWriter bufferedWriter = new OutputStreamWriter(filePath + System.getProperty("file.separator") + fileName), "UTF8");

Después de crear el archivo con el código anterior, se resuelve el problema de codificación. Gracias por cada uno, ponga el esfuerzo aquí.



Todo lo que podemos decir del mensaje es que el archivo no está codificado correctamente en UTF-8. Para averiguar por qué, deberá rastrear el historial de cómo se creó el archivo. Puede (o no) ser útil estudiar el contenido del archivo a nivel binario para ver cuál es la codificación real. Por ejemplo, puede ser útil saber si todo el archivo está en la codificación incorrecta o si solo contiene un par de caracteres extraviados en la codificación incorrecta.


puede agregar un parámetro jvm -Dfile.encoding = utf-8 a su jvm.