Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie
Já pro toto používám InputStreamReader s nastaveným kodováním. private String getDataFrom(URL url, String request) throws IOException { OutputStream os = null; InputStream is = null; InputStreamReader isr = null; HttpURLConnection connection = null; try { connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod(HTTP_REQUEST_METHOD_POST); connection.setRequestProperty(HTTP_CONTENT_TYPE, CONTENT_TYPE_APPLICATION_XML); connection.setDoInput(true); connection.setDoOutput(true); os = connection.getOutputStream(); os.write(request.getBytes()); os.flush(); is = connection.getInputStream(); isr = new InputStreamReader(is, responseEncoding); byte [] response = DataUtils.readFrom(isr); return new String(response); } finally { if(os != null) { try { os.close(); } catch(Exception e) {}; } if(isr != null) { try { isr.close(); } catch(Exception e) {}; } else { if(is != null) { try { is.close(); } catch(Exception e) {}; } } if(connection != null) { try { connection.disconnect(); } catch(Exception e) {}; } } } a analogicky zápis je přes OutputStreamWriter OutputStreamWriter osw = new OutputStreamWriter(os, responseEncoding); osw.write(responseDataXml); osw.flush(); Jaroslav Hurdes Dne 7.12.2012 8:43, Ivan Polak napsal(a): Zdravim konferenciu, chcel som pouzit HttpClient z Apache HttpComponents Client (http://hc.apache.org/httpcomponents-client-ga/) a ziskat obsah jedneho webu, nasledovnym kodom: static StringBuffer getRequest() { StringBuffer result = new StringBuffer(); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(http://www.adresa.sk;); HttpParams params = new SyncBasicHttpParams(); HttpProtocolParams.setContentCharset(params, UTF-8); request.setParams(params); try { HttpResponse response = client.execute(request); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream stream = entity.getContent(); try { BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); String line; while ((line = reader.readLine()) != null) { result.append(line); } } finally { stream.close(); } } } catch (Exception e) { e.printStackTrace(); } return result; } vsetko je OK, ale ziskany obsah ma poskodenu diakritiku (cielovy web je urcite v kodovani UTF-8). prosim, neviete niekto poradit ako dosiahnut spravnu diakritiku. dakujem Ivan
Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie
dakujem vsetkym za reakcie, pouzil som toto: String obsah = EntityUtils.toString(entity, UTF-8) a vsetko je OK. este raz vdaka! Ivan 2012/12/7 Martin Kuba ma...@ics.muni.cz: Dne 7.12.2012 08:43, Ivan Polak napsal(a): InputStream stream = entity.getContent(); try { BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); Problém je v tom new InputStreamReader(stream), ten konstruktor bere default kódování JVM na kterém běží, tedy na klientovi. Správně by to mělo být new InputStreamReader(stream,utf-8) Viz http://docs.oracle.com/javase/7/docs/api/index.html?java/io/InputStreamReader.html Makub -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie
Koukal jsem na stránku http://www.adresa.sk a je tam nastaveno: meta http-equiv=Content-Type content=text/html; charset=windows-1250 Petr 2012/12/7 Ivan Polak ivan.po...@f4s.sk Zdravim konferenciu, chcel som pouzit HttpClient z Apache HttpComponents Client (http://hc.apache.org/httpcomponents-client-ga/) a ziskat obsah jedneho webu, nasledovnym kodom: static StringBuffer getRequest() { StringBuffer result = new StringBuffer(); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(http://www.adresa.sk;); HttpParams params = new SyncBasicHttpParams(); HttpProtocolParams.setContentCharset(params, UTF-8); request.setParams(params); try { HttpResponse response = client.execute(request); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream stream = entity.getContent(); try { BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); String line; while ((line = reader.readLine()) != null) { result.append(line); } } finally { stream.close(); } } } catch (Exception e) { e.printStackTrace(); } return result; } vsetko je OK, ale ziskany obsah ma poskodenu diakritiku (cielovy web je urcite v kodovani UTF-8). prosim, neviete niekto poradit ako dosiahnut spravnu diakritiku. dakujem Ivan
Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie
jaké je nastavené kódování se dá zjistit takto: String charset = EntityUtils.getContentCharSet(entity); Popřípadě text stránky: String obsah = EntityUtils.toString(entity, UTF-8); Snad to pomůže ... Petr 2012/12/7 Ivan Polak ivan.po...@f4s.sk ospravedlnujem sa, to som zabudol napisat, to som tam uviedol iba ako priklad, bola tam samozrejme ina adresa :-) Ivan 2012/12/7 Petr Franta petr.fra...@gmail.com: Koukal jsem na stránku http://www.adresa.sk a je tam nastaveno: meta http-equiv=Content-Type content=text/html; charset=windows-1250 Petr 2012/12/7 Ivan Polak ivan.po...@f4s.sk Zdravim konferenciu, chcel som pouzit HttpClient z Apache HttpComponents Client (http://hc.apache.org/httpcomponents-client-ga/) a ziskat obsah jedneho webu, nasledovnym kodom: static StringBuffer getRequest() { StringBuffer result = new StringBuffer(); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(http://www.adresa.sk;); HttpParams params = new SyncBasicHttpParams(); HttpProtocolParams.setContentCharset(params, UTF-8); request.setParams(params); try { HttpResponse response = client.execute(request); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream stream = entity.getContent(); try { BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); String line; while ((line = reader.readLine()) != null) { result.append(line); } } finally { stream.close(); } } } catch (Exception e) { e.printStackTrace(); } return result; } vsetko je OK, ale ziskany obsah ma poskodenu diakritiku (cielovy web je urcite v kodovani UTF-8). prosim, neviete niekto poradit ako dosiahnut spravnu diakritiku. dakujem Ivan
Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie
Klasika - je tam použito kódování aktuální platformy, takže CP1250 pokud je to spuštěno na windows. Jednoparametrový konstruktor InputStreamReader by měl být označen jako deprecated - když už se tahle zhůvěřilost vůbec do JDK dostala... 2012/12/7 Ivan Polak ivan.po...@f4s.sk: BufferedReader reader = new BufferedReader(new InputStreamReader(stream)); Ivan -- Kamil Podlešák