unmarshall unmarshal multiple marshall marshal example java utf-8 jaxb iso-8859-1

unmarshal - Conversiones Java jaxb utf-8/iso



marshall unmarshall java (1)

Resuelto: usando este código tibid encontrado en stackoverflow

final class HtmlEncoder { private HtmlEncoder() {} public static <T extends Appendable> T escapeNonLatin(CharSequence sequence, T out) throws java.io.IOException { for (int i = 0; i < sequence.length(); i++) { char ch = sequence.charAt(i); if (Character.UnicodeBlock.of(ch) == Character.UnicodeBlock.BASIC_LATIN) { out.append(ch); } else { int codepoint = Character.codePointAt(sequence, i); // handle supplementary range chars i += Character.charCount(codepoint) - 1; // emit entity out.append("&#x"); out.append(Integer.toHexString(codepoint)); out.append(";"); } } return out; } }

HtmlEncoder.escapeNonLatin (MYSTRING)

Tengo un archivo XML que contiene caracteres no estándar (como una "cita" extraña).

Leí el XML usando UTF-8 / ISO / ascii + unmarshalled it:

BufferedReader br = new BufferedReader(new InputStreamReader( (conn.getInputStream()),"ISO-8859-1")); String output; StringBuffer sb = new StringBuffer(); while ((output = br.readLine()) != null) { //fetch XML sb.append(output); } try { jc = JAXBContext.newInstance(ServiceResponse.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); ServiceResponse OWrsp = (ServiceResponse) unmarshaller .unmarshal(new InputSource(new StringReader(sb.toString())));

Tengo una función de oráculo que tomará los códigos iso-8859-1, y los convierte / los mapea en símbolos "literales". es decir: "& # x2019" => "comilla izquierda"

JAXB unmarshal usando iso, muestra los caracteres con la conversión iso fina. es decir, todas las comillas simples extrañas se codificarán en "& # x2019"

así que supongamos que mi cuerda es: clase de entre 10 y 11 años (nota lo extraño, entre 11 y año)

jc = JAXBContext.newInstance(ScienceProductBuilderInfoType.class); Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1"); //save a temp file File file2 = new File("tmp.xml");

esto guardará en el archivo:

class of 10&#8211;11&#8208;year&#8208;olds. (what i want..so file saving works!)

[nota al margen: he leído el archivo usando el lector de archivos java, y pone la cadena de arriba bien]

el problema que tengo es que la representación de STRING que usa jaxb unmarshaller tiene un resultado extraño, por alguna razón no puedo conseguir que la cadena represente -.

cuando I 1: compruebe la salida xml no mapeada:

class of 10?11?year?olds

2: la salida del archivo:

class of 10&#8211;11&#8208;year&#8208;olds

Incluso traté de leer el archivo del XML guardado y luego desempaquetarlo (con la esperanza de obtener el - en mi cadena)

String sCurrentLine; BufferedReader br = new BufferedReader(new FileReader("tmp.xml")); StringBuffer sb = new StringBuffer(); while ((sCurrentLine = br.readLine()) != null) { sb.append(sCurrentLine); } ScienceProductBuilderInfoType rsp = (ScienceProductBuilderInfoType) unm .unmarshal(new InputSource(new StringReader(sb.toString())));

Sin resultado.

alguna idea de cómo obtener el carácter codificado iso-8859-1 en jaxb?