SAXParser кодировка - PullRequest
       10

SAXParser кодировка

0 голосов
/ 02 января 2012

У меня проблема с кодировкой.Для начала, возможно, немного кода:

URL xmlUrl = new URL("http://helion.pl/rss/GW/promocje.rss");

SAXParserFactory saxFactory = SAXParserFactory.newInstance();
SAXParser parser = saxFactory.newSAXParser();
XMLReader reader = parser.getXMLReader();

Helion xmlHandler = new Helion();
reader.setContentHandler(xmlHandler);

InputSource inputSource = new InputSource(xmlUrl.openStream());
inputSource.setEncoding("ISO-8859-1");

reader.parse(inputSource);

Файл закодирован ISO-8859-2, но при использовании setEncoding ("ISO-8859-2") файл не читается.Пожалуйста, помогите.

DefaultHandler:

    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        currentTagName = qName;
        if (TAG_ITEM.equalsIgnoreCase(qName)) {
            odczyt = true;
            element = new Element();
        }
    }

    @Override
    public void characters(char[] ch, int start, int length)
            throws SAXException {
        String value = new String(ch, start, length);
        if (!value.trim().equals("")) {
            if (odczyt) {
                if (TAG_TYTOL.equalsIgnoreCase(currentTagName)) {
                    element.setTytol(value);
                } else if (TAG_OPIS.equalsIgnoreCase(currentTagName)) {
                    element.setOpis(value);
                }
            }
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if (TAG_ITEM.equalsIgnoreCase(localName)) {
            odczyt = false;
            elementy.add(element);
        }
    }
}

Ответы [ 2 ]

1 голос
/ 02 января 2012

Как упоминает Фрэнсис Аптон, символы могут вызываться несколько раз в одном элементе начала / конца XML.Вы должны сделать что-то вроде этого:

   @Override
public void characters(char[] ch, int start, int length)
            throws SAXException {
String s = new String(ch, start, length);
            if (mTextBuffer == null) {
                mTextBuffer = new StringBuffer(s);
            } else {
                mTextBuffer.append(s);
            }
}

И затем вызвать element.setTytol (mTextBuffer) /element.setOpis (mTextBuffer) в вашем методе endElement

0 голосов
/ 02 января 2012

В вашем коде вы устанавливаете его на ISO-8859-1, что сильно отличается, может ли это быть проблемой?

...