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

    [Java] Parsing XML non mantiene encoding originale

    Salve a tutti,

    ho notato che eseguendo il parsing di un file xml con encoding ISO-8859-1, il parser mi ritorna un Document con campi UTF-8.
    Sto usando il parser delle librerie javax.xml.parsers, ma ho avuto lo stesso problema anche con altre librerie.
    C'è un modo per dire al parser di mantenere l'encoding?

    Grazie

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

    Re: [Java] Parsing XML non mantiene encoding originale

    Originariamente inviato da info.beppe
    ho notato che eseguendo il parsing di un file xml con encoding ISO-8859-1, il parser mi ritorna un Document con campi UTF-8.
    E che vuol dire??? Già questa affermazione è poco chiara.

    Allora chiariamo subito: generalmente i parser, per la lettura del documento, possono usare diversi tipi di "sorgenti", ad esempio un InputStream, un Reader o anche direttamente un File o altro (es. URL).

    Se si passa al parser un InputStream, questo fa sì che il parser usi l'encoding specificato nella dichiarazione XML, se presente (altrimenti per default UTF-8).
    Se si passa un Reader, il parser ignora l'encoding nella dichiarazione XML, perché è già il Reader che "sa" come decodificare lo stream di byte. Ma potrebbe essere sbagliato! Se ad esempio usi FileReader, esso usa il charset di default della piattaforma .... che potrebbe essere diverso da quello usato nel documento XML.

    Quindi tu che cosa hai fatto di preciso nel codice? Quale tipo di "sorgente" hai usato? Ti è chiara la questione, innanzitutto?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Allora, grazie per la precisazione sull'uso di InputStream o Reader, non la conoscevo.
    Per quanto riguarda il codice, io uso un ByteArrayInputStream

    codice:
    BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(testoXml), "UTF-8"));
    	    	 
    int c;
    while ((c = reader.read()) != -1) sb.append((char) c);
    	   
    String contenuto8859 = trasformFileXml(sb.toString(), XSL_UTF82ISO88);
    	    
    ByteArrayInputStream is = new  ByteArrayInputStream(contenuto8859.getBytes());	    
    	     
    Document document = null;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    try {
    		DocumentBuilder db = dbf.newDocumentBuilder();
    		document = db.parse(is);
    }catch(ParserConfigurationException pce) {
    		pce.printStackTrace();
    }catch(SAXException se) {
    		se.printStackTrace();
    }catch(IOException ioe) {
    		ioe.printStackTrace();
    }
    La stringa contenuto8859 è frutto di una trasformazione xsl che trasforma il contenuto del file d'origine UTF-8 in ISO-8859-1.
    Per sviluppare uso Eclipse e ho settato il workspace per utilizzare l'ISO-8859-1, quindi non l'ho specificato nel .getBytes().
    Awaken my child, and embrace the glory that is your birthright...

    Tubi (cit.)

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da info.beppe
    La stringa contenuto8859 è frutto di una trasformazione xsl che trasforma il contenuto del file d'origine UTF-8 in ISO-8859-1.
    A che scopo?

    Originariamente inviato da info.beppe
    Per sviluppare uso Eclipse e ho settato il workspace per utilizzare l'ISO-8859-1, quindi non l'ho specificato nel .getBytes().
    A meno che Eclipse cambi il charset di default quando avvia la applicazione .... non credo che ti serva più di tanto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Originariamente inviato da andbin
    A che scopo?
    Devo inserire file xml e alcuni suoi campi in una tabella oracle ISO-8859-1.

    A meno che Eclipse cambi il charset di default quando avvia la applicazione .... non credo che ti serva più di tanto.
    Il problema è che non conosco come funziona il getBytes() dentro Eclipse.
    Se Eclipse imposta il workspace in modo che utilizzi l'ISO come charset di default, immagino che lo imposti anche per la jvm.
    Awaken my child, and embrace the glory that is your birthright...

    Tubi (cit.)

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.