Java encoding von UTF-8 auf ISO-8859-1 in eine XML-Datei

Ich habe versucht, Sie zu konvertieren Sie einen UTF-8 String, der zu seinen verwandten in ISO-8859-1 für die Ausgabe in ein XML-Dokument, und egal was ich versuche, die Ausgabe ist immer falsch angezeigt.

Zur Vereinfachung der Frage, habe ich ein code-snippet mit allen tests, die ich habe, und ich copy/paste nach, dass das generierte Dokument.

Können Sie auch sicher sein, ich habe versucht, alle mögliche Kombination zwischen neuen String(xxx.getBytes("UTF-8"), "ISO-8859-1"), durch die Umstellung von UTF & ISO, und manchmal auch durch die Einstellung, den gleichen Wert. Nichts funktioniert !

Hier ist das snippet :

//@see http://stackoverflow.com/questions/229015/encoding-conversion-in-java
private static String changeEncoding(String input) throws Exception {
    //Create the encoder and decoder for ISO-8859-1
    Charset charset = Charset.forName("ISO-8859-1");
    CharsetDecoder decoder = charset.newDecoder();
    CharsetEncoder encoder = charset.newEncoder();

    //Convert a string to ISO-LATIN-1 bytes in a ByteBuffer
    //The new ByteBuffer is ready to be read.
    ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(input));

    //Convert ISO-LATIN-1 bytes in a ByteBuffer to a character ByteBuffer and then to a string.
    //The new ByteBuffer is ready to be read.
    CharBuffer cbuf = decoder.decode(bbuf);
    return cbuf.toString();
}

//@see http://stackoverflow.com/questions/655891/converting-utf-8-to-iso-8859-1-in-java-how-to-keep-it-as-single-byte
private static String byteEncoding(String input) throws Exception {
    Charset utf8charset = Charset.forName("UTF-8");
    Charset iso88591charset = Charset.forName("ISO-8859-1");

    ByteBuffer inputBuffer = ByteBuffer.wrap(input.getBytes());

    //decode UTF-8
    CharBuffer data = utf8charset.decode(inputBuffer);

    //encode ISO-8559-1
    ByteBuffer outputBuffer = iso88591charset.encode(data);
    byte[] outputData = outputBuffer.array();
    return new String(outputData, "ISO-8859-1");
}

public static Result home() throws Exception {
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();

    //root elements
    Document doc = docBuilder.newDocument();
    doc.setXmlVersion("1.0");
    doc.setXmlStandalone(true);

    Element rootElement = doc.createElement("test");
    doc.appendChild(rootElement);

    rootElement.setAttribute("original", "héllo");

    rootElement.setAttribute("stringToString", new String("héllo".getBytes("UTF-8"), "ISO-8859-1"));

    rootElement.setAttribute("stringToBytes", changeEncoding("héllo"));

    rootElement.setAttribute("stringToBytes2", byteEncoding("héllo"));

    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = tf.newTransformer();
    transformer.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1");

    StringWriter writer = new StringWriter();
    transformer.transform(new DOMSource(doc), new StreamResult(writer));
    String output = writer.getBuffer().toString().replaceAll("\n|\r", "");

    //The following is Play!Framework specifics for rendering an url, but I believe this is not the problem (I checked in the developer console, the document is correctly in "ISO-8859-1"
    response().setHeader("Content-Type", "text/xml; charset=ISO-8859-1");
    return ok(output).as("text/xml");
}

Und das Ergebnis :

<?xml version="1.0" encoding="ISO-8859-1"?>
<test original="héllo" stringToBytes="héllo" stringToBytes2="héllo" stringToString="héllo"/>

Wie kann ich Vorgehen?

Ich denke, Sie mispelled response. Wenn Ihr reden response() aus dem Spiel!Frameowork, es gibt keine setCharacterEncoding() (ich bin mit Spielen! 2.1.5). Es gibt auch keine setCharacterEncoding() im doc " (Dokument)
Vielen Dank für Ihre Hilfe. Ich habe schon setzen Sie die Kodierung auf "ISO-8859-1" durch Aufruf setHeader. Es gibt keine encoding im Spiel v2.1.5 (aber es gibt eine CONTENT_ENCODING, das ist endgültig)
Sorry nochmal. Ich lese 1.2.5 und nicht 2.1.5.
Keine Probleme 😉 ich habe auch versucht nur die Kodierung im http-response ohne ändern des strings, aber es hat nicht geklappt. Es funktioniert nur, wenn ich auch entfernen, das encoding in der xml-Dokument, aber es ist, weil die Seite wird dann angezeigt, wie UTF-8, was ich nicht will.
Sie waren in gewisser Weise Recht. Ich endlich eingeschaltet der Ausgang von StringWriter schreiben in eine Datei, und dann die Ausgabe direkt diese Datei als binary, und jetzt alles funktioniert, mit der richtigen Codierung. Keine Umschaltung der Codierung gemacht wurden! Können Sie Ihre Kommentare als eine anwser, werde ich es akzeptieren 🙂

InformationsquelleAutor Cyril N. | 2014-02-23

Schreibe einen Kommentar