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–11‐year‐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–11‐year‐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?