SAXParser не может разобрать некоторые символы - PullRequest
5 голосов
/ 30 января 2011

Я делаю несколько простых SAXParsing с SAXParser и т. Д. На Android / Java

Он может правильно анализировать файлы, но икнет, когда встречает некоторые специальные символы, например, если он анализирует этот xml ниже:

<?xml version="1.0" encoding="ISO-8859-1" ?><MTRXML version="1.0">
<GEOCODE key="pohj">
<LOC name1="Pohjantori" number="" city="Espoo" code="995" address="" type="1" category="poi" x="2544225" y="6674893" lon="24.79378" lat="60.18324" />
<LOC name1="Pohjois-Haaga" number="" city="Helsinki" code="41" address="" type="1" category="poi" x="2549164" y="6680186" lon="24.88405" lat="60.23018" />
<LOC name1="Pohjois-Leppävaara" number="" city="Espoo" code="50" address="" type="1" category="poi" x="2545057" y="6679240" lon="24.80974" lat="60.22216" />

он будет икать, когда встретится с ä в Pohjois-Leppävaara в последней строке.

Ошибка, которую он дает:

01-30 18:14:52.039: WARN/System.err(686): org.apache.harmony.xml.ExpatParser$ParseException: At line 5, column 24: not well-formed (invalid token)

Я уверен, что SAXParser может обрабатывать эти символы, но я считаю, что мне нужно где-то установить кодировку и т. Д.?

код Java таков:

AXParserFactory factory = SAXParserFactory.newInstance();

    SAXParser parser = null;
    try {
        parser = factory.newSAXParser();
    } catch (ParserConfigurationException e) {
        e.printStackTrace();
        return null;
    } catch (SAXException e) {
        e.printStackTrace();
        return null;
    }

    XmlHandler handler = new XmlHandler();
    try {
        parser.parse(urls[0], handler);
    } catch (SAXException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }

Ответы [ 2 ]

4 голосов
/ 30 января 2011

Это, кажется, решает это:

Android: проблемы SaxParser с использованием кодировки ISO-8859-1

            StringReader sr = new StringReader(xmlString);
            InputSource is = new InputSource(sr);
            is.setEncoding("ISO-8859-1");
            xmlReader.parse(is);
4 голосов
/ 30 января 2011

Я ожидаю, что это ошибка в кодировке документа.Используйте шестнадцатеричный редактор, чтобы убедиться, что Leppävaara - это последовательность байтов 4c 65 70 70 e4 76 61 61 72 61.Если ä отличается от E4, то документ был сохранен с использованием некоторой кодировки, отличной от ISO-8859-1.

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