Я не знаю Рим (вы могли бы поставить ссылку в своем вопросе).ИСО-8859-1 должна быть правильной кодировкой, чтобы использовать для канала, который вы связали.Но разве ваша библиотека не поддерживает InputStream
в качестве источника (поэтому она сама будет искать правильную кодировку в преамбуле XML)?
Может ли быть, что вывод искажен после его обработки выводомвашей программы?Не могли бы вы написать
System.out.println("S\u00e3o Paulo");
в вашей программе и сообщить о ее выводе?(Это должно быть "Сан-Паулу", если ваша комбинация Java + консоль настроена правильно.)
Итак, я сейчас скачал и скомпилировал Rome (что потребовало полчаса загрузки других вещей Maven)и я могу воспроизвести проблему.Похоже, что метод build
, принимающий Reader, имеет проблемы.
Вот вариант, который работает (если rome, jdom и xerces находятся в пути к классам):
package de.fencing_game.paul.examples.rome;
import org.xml.sax.InputSource;
import java.nio.charset.Charset;
import java.io.*;
import java.net.*;
import com.sun.syndication.io.*;
import com.sun.syndication.feed.synd.*;
public class RomeTest {
public static void main(String[] ignored)
throws IOException, FeedException
{
String charset = "UTF-8";
String url = "http://oglobo.globo.com/rss/plantaopais.xml";
InputStream is = new URL(url).openConnection().getInputStream();
InputSource source = new InputSource(is);
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(source);
System.out.println("description: " + feed.getDescription());
}
}
ИспользуяInputSource
с InputStream
вместо Reader
, синтаксический анализатор сам находит правильную кодировку и получает ее правильно.
Покопавшись в источнике, кажется, нашSyndFeed передает Reader или InputSource в JDOM, который, в свою очередь, передает их SAX XMLReader, который, кажется, запутывается, если сталкивается с Reader, который представляет собой <?xml ... encoding="ISO-8859-1" ?>
.Затем я покопался в источнике Xerces (который, похоже, использовался здесь), но не нашел ничего подозрительного, что могло бы вызвать это.