2012-01-02 2 views
0

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

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); 
     } 
    } 
} 

ответ

0

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

+0

Когда я использую ISO-8859-1 Я получаю неполную текст. Я должен получить: < a href = "http://helion.pl/ksiazki/szastf.htm"> < img width = "65px" align = "left" src = "http: // heli .... .. Я получаю: /a> Nie mog3e¶ lepiej trafia! W tej ksi ±? Ce siedemnastu fotografów .... –

+0

Когда это происходит, когда вы устанавливаете кодировку как 'ISO-8859-2'? имея проблемы с этим, затем покажите это как пример кода и объясните, что происходит при его попытке. –

+0

Пожалуйста, добавьте дополнительную информацию о том, что происходит в вашем ответе (путем редактирования), а не комментарии. Комментарии слишком сложны для читать –

1

Как упоминает Фрэнсис Аптон, символы могут быть вызваны несколько раз в пределах одного элемента начала/конца 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

Смежные вопросы