Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [JAVA] encoding xml

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    29

    [JAVA] encoding xml

    Ciao a tutti,
    spiego il problema sperando di aver postato nella sezione corretta: trattasi di encoding xml mediante classi java.
    Il problema sta nel fatto che genero un file xml con encoding ISO-8859-1 in questo modo:

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    DOMReader reader = new DOMReader();
    org.dom4j.Document docout = reader.read(doc);

    OutputFormat outF = OutputFormat.createPrettyPrint();
    outF.setEncoding("ISO-8859-1");

    XMLWriter wr = new XMLWriter(baos, outF);
    wr.write(docout);

    out.write(baos.toByteArray());
    out.flush();
    out.close();

    L'oggetto doc è un istanza della classe org.w3c.dom.Document, out è un OutputStream.
    Lo stream baos viene passato ad un servizio come array di byte (baos.toByteArray())

    Chi però si occupa di ricevere lo stream mi dice che gli arriva con i caratteri speciali accentati errati (es: àèìòù -> ÓÞý‗¨).
    Mi chiedo quindi se il problema non sia suo che non legge lo stream con la medesima codifica con cui è costruito.

    A me pare corretto il mio stream, se faccio una system.out vedo effettivamente i caratteri così, mentre se creo un file mediante un FileOutputStream il file xml creato e lo apro con un browser, i caratteri accentati sono correttamente interpretati.
    Qualcuno mi può dare una mano per favore a capire se sbaglio io o chi legge lo stream?
    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    usa i tag code per il codice.
    Non ti basta specificare l'encoding sull'elemento, devi essere sicuro che quello che mandi (baos) sia nel corretto encoding
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    29
    Grazie per la risposta ma... non ho capito.
    Dovrei racchiudere nei tag <CODE></CODE> il testo di ciascun tag del xml?

    Ho provato a generare un file xml semplicemente così:

    FileOutputStream fileoutputstream = new FileOutputStream(sPathFile);
    fileoutputstream.write(outXml.toByteArray());
    fileoutputstream.close();

    Tale xml aperto nel browser ha i caratteri accentati correttamente visualizzati.
    Tali caratteri appaiono con ultraedit in hex edit come iso-8859 (es: à -> E0).

    Ho inviato tale xml al cliente che lo ha letto ed inviato al servizio, e mi dice che questo è corretto.
    Ma come diamine può essere corretto se è lo stesso stream di byte che invio direttamente io?
    Per leggerlo ha fatto così, e non ci vedo niente di particolare:

    InputStream inputStream = classeXXX.class

    .getClassLoader().getResourceAsStream(nomeFile);

    byte[] data = new byte[(int) inputStream.available()];

    inputStream.read(data);

    String fileXml = new String(data);

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da cg76
    Grazie per la risposta ma... non ho capito.
    Dovrei racchiudere nei tag <CODE></CODE> il testo di ciascun tag del xml?
    no, valia intendeva questo:

    codice:
    FileOutputStream fileoutputstream = new FileOutputStream(sPathFile);
    fileoutputstream.write(outXml.toByteArray());
    fileoutputstream.close();
    Tale xml aperto nel browser ha i caratteri accentati correttamente visualizzati.
    Tali caratteri appaiono con ultraedit in hex edit come iso-8859 (es: à -> E0).

    Ho inviato tale xml al cliente che lo ha letto ed inviato al servizio, e mi dice che questo è corretto.
    Ma come diamine può essere corretto se è lo stesso stream di byte che invio direttamente io?
    Per leggerlo ha fatto così, e non ci vedo niente di particolare:

    codice:
    InputStream inputStream = classeXXX.class
    
                            .getClassLoader().getResourceAsStream(nomeFile);
    
                byte[] data = new byte[(int) inputStream.available()];
    
                inputStream.read(data);
    
                String fileXml = new String(data);
    basta solo imparare a leggere il regolamento per rendere/si la vita più facile sui forum
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2007
    Messaggi
    29
    Scusatemi, è un po che non scrivo e me ne ero dimenticato...

    spiego il problema sperando di aver postato nella sezione corretta: trattasi di encoding xml mediante classi java.
    Il problema sta nel fatto che genero un file xml con encoding ISO-8859-1 in questo modo:

    codice:
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    DOMReader reader = new DOMReader();
    org.dom4j.Document docout = reader.read(doc);
    
    OutputFormat outF = OutputFormat.createPrettyPrint();
    outF.setEncoding("ISO-8859-1");
    
    XMLWriter wr = new XMLWriter(baos, outF);
    wr.write(docout);
    
    out.write(baos.toByteArray());
    out.flush();
    out.close();
    L'oggetto doc è un istanza della classe org.w3c.dom.Document, out è un OutputStream.
    Lo stream baos viene passato ad un servizio come array di byte (baos.toByteArray())

    Chi però si occupa di ricevere lo stream mi dice che gli arriva con i caratteri speciali accentati errati (es: àèìòù -> ÓÞý=¨).
    Mi chiedo quindi se il problema non sia suo che non legge lo stream con la medesima codifica con cui è costruito.

    A me pare corretto il mio stream, se faccio una system.out vedo effettivamente i caratteri così, mentre se creo un file mediante un FileOutputStream il file xml creato e lo apro con un browser, i caratteri accentati sono correttamente interpretati.
    Qualcuno mi può dare una mano per favore a capire se sbaglio io o chi legge lo stream?

    Ho provato a generare un file xml semplicemente così:
    codice:
    FileOutputStream fileoutputstream = new FileOutputStream(sPathFile);
    fileoutputstream.write(outXml.toByteArray());
    fileoutputstream.close();
    Tale xml aperto nel browser ha i caratteri accentati correttamente visualizzati.
    Tali caratteri appaiono con ultraedit in hex edit come iso-8859 (es: à -> E0).

    Ho inviato tale xml al cliente che lo ha letto ed inviato al servizio, e mi dice che questo è corretto.
    Ma come diamine può essere corretto se è lo stesso stream di byte che invio direttamente io?
    Per leggerlo ha fatto così, e non ci vedo niente di particolare:
    codice:
    InputStream inputStream = classeXXX.class
    
    .getClassLoader().getResourceAsStream(nomeFile);
    
    byte[] data = new byte[(int) inputStream.available()];
    
    inputStream.read(data);
    
    String fileXml = new String(data);

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.