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);