Я пытаюсь прочитать/разобрать RSS-канал из изображения НАСА дня. Вот код ниже. Я получаю исключение, которое мне сказать это:Я получаю недопустимый байт, когда я пытаюсь разобрать xml
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-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.arrangeCapacity(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(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.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at Start.processFeed(Start.java:30)
at Loader.main(Loader.java:12)
Что я делаю неправильно?
P.S. конечно, у меня есть другой класс с основным методом :)
Заранее спасибо.
import java.io.InputStream;
import java.net.URL;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class Start extends DefaultHandler {
private String url = "http://www.nasa.gov/rss/dyn/image_of_the_day.rss";
private boolean inUrl = false;
private boolean inTitle = false;
private boolean inDescription = false;
private boolean inItem = false;
private boolean inDate = false;
public void processFeed() {
try {
SAXParserFactory factory =
SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
reader.setContentHandler(this);
InputStream inputStream = new URL(url).openStream();
reader.parse(new InputSource(inputStream));
} catch(Exception e) {
e.printStackTrace();
}
} // processFeed
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(localName.startsWith("item")) { inItem = true; }
else if (inItem) {
if(localName.equals("title")) { inTitle = true; }
else { inTitle = false; }
if(localName.equals("description")) { inDescription = true; }
else { inDescription = false; }
if(localName.equals("pubDate")) { inDate = true; }
else { inDate = false; }
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String chars = new String(ch).substring(start, start + length);
if(inTitle) { System.out.println(chars); }
if(inDescription) { System.out.println(chars); }
if(inDate) { System.out.println(chars); }
}
}
Я никогда не думал о сжатии, спасибо – SuperManEver
Можете ли вы дать ссылку на какую-то статью или что-то еще, где я могу больше узнать об этом? – SuperManEver
Здесь речь идет о URLConnections в целом: http://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html. Что касается HTTP в специальном режиме, вы можете искать HTTP-запросы и заголовки ответов и коды ответов. – isnot2bad