MalformedByteSequenceException при попытке анализа XML - PullRequest
1 голос
/ 07 мая 2010

У меня есть следующие данные .gpx из Википедии:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" creator="byHand" version="1.1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
  <wpt lat="39.921055008" lon="3.054223107">
    <ele>12.863281</ele>
    <time>2005-05-16T11:49:06Z</time>
    <name>Cala Sant Vicenç - Mallorca</name>
    <sym>City</sym>
  </wpt>
</gpx>

Когда я вызываю мой метод синтаксического анализа, я получаю исключение (см. Ниже). Звонок выглядит так:

Document tmpDoc = getParsedXML(currentGPX);

Мой метод синтаксического анализа выглядит следующим образом (стандартный код синтаксического анализа, ничего интересного ...)

    public static Document getParsedXML(String fileWithPath){
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db;
    Document doc = null;
    try {
        db = dbf.newDocumentBuilder();
        doc = db.parse(new File(fileWithPath));
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
    } catch (SAXException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return doc;
    }

Этот простой код выдает следующее исключение:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 3-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 Zeugs.getParsedXML(Zeugs.java:38)
at Zeugs.main(Zeugs.java:25)

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

Ответы [ 2 ]

5 голосов
/ 07 мая 2010

Я бы предположил, что ваш файл не был сохранен в формате UTF-8.

2 голосов
/ 30 июля 2014

У меня было такое же сообщение об ошибке в одной из моих программ. Но ошибка возникала только при запуске jar в консоли Windows. В linux или в eclipse (щелкните правой кнопкой мыши на файле основного класса> запустить как Java-приложение) ошибка не возникала.

Это, наверное, из-за того, что кодировка по умолчанию установлена ​​в Windows (Cp ..) против UTF-8 в linux и в eclipse. Чтобы изменить значение по умолчанию при запуске jar, просто добавьте параметр -Dfile.encoding = UTF8 в jvm

java -Dfile.encoding=UTF8 -jar myjar.jar

Причиной, по которой программа использует этот параметр, может быть то, что кодировка не была указана явно при использовании реализаций входного потока или считывателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...