2012-03-29 21 views
16

Ho un file xml che contiene caratteri arabi. Quando provo ad analizzare un file, si genera l'eccezione, MalformedByteSequenceException: byte 2 non valido di UTF a 2 byte 8 sequenza. Uso DOM POI per analizzare il documento.MalformedByteSequenceException: byte 2 non valido della sequenza UTF-8 a 2 byte

The Log è,

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) 

L'eccezione sorgono solo in Windows macchina, si pone in Linux Machine.How posso risolvere il suggerimento issue.Any dovrebbe essere apprezzabile.

risposta

13

Ho risolto il problema, creando il file XML utilizzando il formato UTF8.

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

Dopo aver creato il file utilizzando il codice di cui sopra, il problema di codifica è resolved.Thanks per tutti, mettere lo sforzo qui.

+3

questa è la soluzione che ha funzionato per me, ma ho dovuto fare un piccolo cambiamento: OutputStream os = new FileOutputStream (file); e OutputStreamWriter bufferedWriter = new OutputStreamWriter (os, "UTF8"); – maxivis

0

Penso che il parser si aspetti un byte codificato in UTF-8 e lo riceva in codifica diversa. Controlla la codifica del file.

Una possibile soluzione può essere la conversione del file in UTF-8.

Se si dispone di un sistema UNIX, è possibile utilizzare questo strumento

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

questo è caratteri del documento di avvio del sistema operativo basato su. Dovresti usare un visualizzatore di byte e cancellarlo dal tuo documento. Puoi provare ad usare qualcosa come unix2dos per convertire i caratteri di controllo.

3

Tutto ciò che possiamo dire dal messaggio è che il file non è codificato correttamente in UTF-8. Per capire perché, dovrai tracciare la cronologia di come è stato creato il file. Potrebbe (o non esserlo) essere utile per studiare il contenuto del file a livello binario per vedere quale sia la vera codifica. Ad esempio, può essere utile sapere se l'intero file è nella codifica errata o se contiene solo un paio di caratteri vaganti nella codifica errata.

7

è possibile aggiungere un parametro jvm -Dfile.encoding = utf-8 al proprio jvm.

Problemi correlati