Необходимо преобразовать формат вывода в UTF-8
, потому что вывод не обрабатывает специальные символы.
Кто-нибудь знает, как это можно сделать?
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
URL u = new URL("http://www.aredacao.com.br/tv-saude");
Document doc = builder.parse(u.openStream());
NodeList nodes = doc.getElementsByTagName("item");'
Проблема в том, что сайт возвращает <?xml version='1.0' encoding='iso-8859-1'?>
Но он должен возвращать <?xml version='1.0' encoding='UTF-8'?>
.
Одним из решений является перевод каждого текста элемента самостоятельно:
static void readData()
throws IOException,
ParserConfigurationException,
SAXException {
DocumentBuilder builder =
DocumentBuilderFactory.newInstance().newDocumentBuilder();
URL u = new URL("http://www.aredacao.com.br/tv-saude");
Document doc = builder.parse(u.toString());
NodeList nodes = doc.getElementsByTagName("item");
for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
Element el = (Element) node;
String title =
el.getElementsByTagName("title").item(0).getTextContent();
title = treatCharsAsUtf8Bytes(title);
String description =
el.getElementsByTagName("description").item(0).getTextContent();
description = treatCharsAsUtf8Bytes(description);
System.out.println("title=" + title);
System.out.println("description=" + description);
System.out.println();
}
}
private static String treatCharsAsUtf8Bytes(String s) {
byte[] bytes = s.getBytes(StandardCharsets.ISO_8859_1);
return new String(bytes, StandardCharsets.UTF_8);
}
Другая возможность заключается в написании подкласса FilterInputStream, который заменяет ошибочную кодировку пролога <?xml
Xml, но это намного больше работы, и я бы подумал только об этом, если бы у документа была сложная структура со многими различными элементами, так что каждый быть громоздким.