Domanda

Come posso leggere flusso HTTP con la pagina HTML nella codifica della pagina?

Ecco un frammento di codice che uso per ottenere il flusso HTTP. InputStreamReader ha l'argomento opzionale codifica, ma non ho idee circa il modo per ottenerlo.

URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader d = new BufferedReader(new InputStreamReader(is));
È stato utile?

Soluzione

Recupero di una pagina web è un processo abbastanza complicato. È per questo che esistono le biblioteche, come HttpClient . Il mio consiglio è che se non si ha un motivo molto convincente in caso contrario, utilizzare HttpClient.

Altri suggerimenti

Quando la connessione viene establised attraverso

URLConnection conn = url.openConnection ();

è possibile ottenere il nome del metodo di codifica attraverso url.getContentEncoding () in modo da passare questa stringa per InputStreamReader () in modo che il codice è simile

BufferedReader d = new BufferedReader (nuovo InputStreamReader (è, url.getContentEncoding ()));

La risposta breve è URLConnection.getContentEncoding () . La risposta giusta è quello che suggerisce Cletus, utilizzare una libreria di terze parti appropriato se non si ha un motivo valido per non farlo.

Ho avuto un problema molto simile a risolvere recente. Come le altre risposte, ho anche iniziato a giocare con HttpClient et al. Tuttavia, quelle librerie richiedono che si conosce upfront la codifica del file che si desidera scaricare. In caso contrario, la conversione del file HTML recuperato produrrà in caratteri illeggibili.

Questo approccio non funziona, perché la codifica del file HTML viene specificato solo nel file HTML stesso. A seconda della versione HTML, la codifica è specificato in molti modi diversi, come intestazione XML, due elementi meta tag diverso testa, ecc Se si segue questo approccio, si avrebbe bisogno di:

  1. Scarica il file e guardare il contenuto per capire la codifica analizzando il contenuto HTML.
  2. Scarica file una seconda volta per specificare la codifica corretta.

In particolare l'analisi dei contenuti HTML per appropriate stringhe di codifica è soggetto a errori. Invece, vi consiglio di fare affidamento su una libreria come JSoup , che farà il lavoro per voi. Così, invece di scaricare il file tramite HttpClient, utilizzare JSoup per recuperare il file per te. Inoltre, JSoup fornisce un bel API per accedere a diverse parti della pagina HTML direttamente (ad esempio, titolo della pagina).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top