MalformedByteSequenceException: недопустимый байт 2 из 2-байтовой последовательности UTF-8

У меня есть xml файл, который содержит арабские символы. Когда я пытаюсь разобрать файл, возникает Exception, MalformedByteSequenceException: Недопустимый байт 2 из 2-байтовой последовательности UTF-8. Я использую POI DOM для анализа документа.

Журнал,

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)

Исключение возникает только в Windows Machine, не возникает в Linux Machine.Как я могу решить проблему. Любое предложение должно быть заметным.

Ответы

Ответ 1

Я решил проблему, создав файл XML, используя формат UTF8.

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

После создания файла с использованием вышеуказанного кода проблема с кодировкой будет разрешена. Спасибо за каждого, приложите усилие здесь.

Ответ 2

вы можете добавить в jvm параметр jvm -Dfile.encoding = utf-8.

Ответ 3

Все, что мы можем сказать из сообщения, состоит в том, что файл неправильно закодирован в UTF-8. Чтобы понять, почему, вам нужно будет проследить историю создания файла. Он может (или не может) быть полезным для изучения содержимого файла на двоичном уровне, чтобы узнать, что такое фактическая кодировка. Например, может быть полезно знать, находится ли весь файл в неправильном кодировании или он содержит только пару бродячих символов в неправильной кодировке.

Ответ 5

Я думаю, что ваш парсер ожидает байта, закодированного в UTF-8, и получает его в другой кодировке. Проверьте кодировку файла.

Возможным решением может быть преобразование файла в UTF-8.

Если у вас есть система unix, вы можете использовать этот инструмент

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

Ответ 6

это символ запуска на основе ОС. Вы должны использовать некоторый байт-просмотрщик и удалить его из своего документа. Вы можете попытаться использовать что-то вроде unix2dos для преобразования управляющих символов.