Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Scaricare pagina html (utf-8)

    Ciao, ho scoperto che il metodo che ho sempre usato per scaricare pagine web non funziona come dovrebbe con i caratteri cirillici, polacchi, ecc...
    Il mio metodo è questo:
    codice:
    public String readHTML(String path) {
            String result = null;
            try {
                    URL url = new URL(path);
                    StringBuffer sbuf = new StringBuffer();
                    HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
                    httpURLConnection.setDoInput(true); 			             
                    httpURLConnection.setDoOutput(true); 			
                    httpURLConnection.setUseCaches(false); 			
                    httpURLConnection.setRequestProperty("Referer", "http://www.google.com");
     		httpURLConnection.setRequestProperty("User-Agent", "Internet Explorer"); 		
    	 	// The CharSet has to be UTF-8!! 	
    		BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), Charset.forName("UTF-8"))); 			
                    String line = ""; 		
    		while((line = br.readLine()) != null) { 		
    		 	sbuf.append(line);
     		} 			
    	        // Parse the file manually 		
            	result = sbuf.toString(); 			 			
     	} 
            catch (Exception e) { 		
    		e.printStackTrace();
     	} 		 		
            return result;
    }
    Gli output che ottengo sono del tipo:

    OK : Communauté de communes du Bassin de Pompey -> Communauté_de_communes_du_Bassin_de_Pompey (la 'é' è correttamente sostituita dall'entità '&eacute ;'
    ERR: Столична община -> ????????_??????
    ERR: OŠ Vojke Šmuc Izola - SE Vojka Šmuc Isola -> O?_Vojke_?muc_Izola_-_SE_Vojka_?muc_Isola

    Qualcuno sa aiutarmi?? Grazie!!

    PS: Gli underscore li metto io

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Scaricare pagina html (utf-8)

    Originariamente inviato da dionisoft
    codice:
    	 	// The CharSet has to be UTF-8!! 	
    		BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(), Charset.forName("UTF-8")));
    Se devi operare sempre con una certa pagina ben precisa e tu "sai" a priori il charset della pagina (ed è facile scoprire quale è anche attraverso un browser) allora ovviamente potresti anche "cablare" la specifica del charset nel sorgente come fatto sopra.

    Ma chiaramente non sarebbe una gestione "generica". Il charset è fornito, tipicamente, tra gli header nella response, per la precisione, l'header "Content-Type". Se nel Content-Type non c'è indicato il charset si dovrebbe assumere ISO-8859-1 (se non sbaglio).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Le pagine sono diverse, ma tutte dello stesso sito e con lo stesso Charset (UTF-8 per l'appunto).
    Non riesco a capire perché, anche perché ho letto e riletto specifiche e tutte le altre possibili risorse online, ed il codice dovrebbe esser corretto...
    Bhò, continuerò a provare!!
    Grazie mille della risposta!! Ciao!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dionisoft
    Le pagine sono diverse, ma tutte dello stesso sito e con lo stesso Charset (UTF-8 per l'appunto).
    Non riesco a capire perché, anche perché ho letto e riletto specifiche e tutte le altre possibili risorse online, ed il codice dovrebbe esser corretto...
    Se tu sai e hai già verificato che la pagina è proprio effettivamente in UTF-8, la specifica che hai fatto allora è perfettamente OK.

    Ma allora quale è il tuo dubbio? Che vedi delle scritte che non sono come quelle che vedresti nel browser?? Ma allora la questione è "dove le stampi/visualizzi"??? Se le stampi su una "console" ..... ci credo che le vedi male!!! La console del prompt dei comandi tipicamente (almeno per il Windows in italiano) usa il code page 850, che non "mappa" affatto caratteri cirillici o polacchi o giù di lì .....


    P.S. Generalmente, e per maggior performance, sarebbe meglio se non leggi "a righe". Perché innanzitutto butti via i newline e comunque sarebbe meno efficiente.
    Basta usare direttamente il InputStreamReader e leggere "a blocchi di char" e buttarli dentro lo string buffer.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Si, so che la console non supporta queste codifiche, infatti le mie prove le ho effettuate sia su files di testo che su pagine jsp.
    Alla fine comunque, dopo ore di modifiche, mi sembra di esser riuscito a risolvere impostando il tipo di codifica mediante un filtro in tutte le pagine della mia applicazione.
    Domattina dovrò cercare un modo per trasformare questi caratteri in qualcosa di utilizzabile per delle query...purtroppo il mio database prevede soltanto la codifica utf-8...
    Magari esistono delle entità html anche per questi!!
    Tu ne sai qualcosa?

    PS: Grazie per il consiglio sulla lettura, domattina modificherò anche quello!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.