utf-8 с использованием стандартных openStream и DocumentBuilder

1

Необходимо преобразовать формат вывода в 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");'
Теги:
utf-8
rss

1 ответ

0
Лучший ответ

Проблема в том, что сайт возвращает <?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, но это намного больше работы, и я бы подумал только об этом, если бы у документа была сложная структура со многими различными элементами, так что каждый быть громоздким.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню