Bom dia a todos!
Eu estou aprendendo a programar em Java para o Android e estou trabalhando em um código de um Leitor RSS. Eu sou programador e trabalho com C/C++ mas não conheço Java (apesar de sua proximidade com C++).
Essa minha questão imagino que não seja tão básica assim mas como não tenho certeza vou postar aqui mesmo. Se estiver no local errado, favor moverem para o local apropriado!
Todo o problema está na interpretação do encoding do arquivo xml. Apesar de especificado, parece que é ignorado!
Eu já fiz várias tentativas, muitos testes com soluções de problemas similares que encontrei na internet mas nada resolveu. Talvez seja algo bem simples mas não tenho mais idéias sobre o que fazer…
Durante minhas pesquisas para tentar resolver o problema eu descobri que o parser do SAX apenas aceita o encoding de um byte stream, ignorando de character streams. Assim segue o código:
public List<Article> getLatestArticles(String feedUrl) {
URL url = null;
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
url = new URL(feedUrl);
URLConnection conn = url.openConnection();
InputStream stream = conn.getInputStream();
String ContentEncoding = conn.getContentEncoding();
if("gzip".equals(conn.getContentEncoding())) {
stream = new GZIPInputStream(stream);
}
InputSource source = new InputSource(stream);
InputStream ByteStream = source.getByteStream();
Reader CharStream = source.getCharacterStream();
String encoding = source.getEncoding();
/// source.setEncoding("ISO-8859-1");
xr.setContentHandler(this);
xr.parse(source);
} catch (IOException e) {
Log.e("RSS Handler IO", e.getMessage() + " >> " + e.toString());
} catch (SAXException e) {
Log.e("RSS Handler SAX", e.toString());
} catch (ParserConfigurationException e) {
Log.e("RSS Handler Parser Config", e.toString());
}
return articleList;
}
Resultado deste código:
ContentEncoding = null
ByteStream é válido
CharacterStream = null
encoding = null
Conforme pode ser visto, parece que o InputSource está utilizando um byte stream mas mesmo assim o encoding retornado é sempre nulo. Se eu forço o encoding pelo setEncoding, o programa funciona corretamente.
Dois exemplos de xml que estou tentando interpretar são:
( ISO-8859-1 ) - http://www1.caixa.gov.br/rss/asp/geraXML_rss_loterias.asp?canal=MEGASENA
( UTF-8 ) - http://www.hardware.com.br/feeds/global.xml
Obs: Ambos arquivos xml retornam encoding = null
Obrigado desde já!
Abraços,
Marcelo Utikawa da Fonseca