# XML encoding UTF-8 und JDOM



## chrissy (28. Mrz 2007)

Hallo,

ich versuche gerade per Java ein XML zu erstellen. Nachdem ich hier im Forum ein bißchen geschaut habe, was sich dafür eignet, habe ich mich für JDOM entschieden.
Das klappt auch alles soweit ganz super, aber ...

Wenn ich in dem XML File Umlaute (ä, ö, ü) habe, bekomme ich dann im Browser folgenden Fehler:
"An invalid character was found in text content. Error processing resource 'file:/// ... ". Wenn ich das Encoding nach "ISO-8859-1" ändere funktioniert es. Soweit ich herausfinden konnte sollte UTF-8 eigentlich Umlaute auch unterstützen, aber anscheinend läuft da was falsch. 
Also dachte ich mir ich änder einfach das Encoding beim Schreiben des Files, aber wie geht das mit JDOM???

Folgenden Code habe ich bisher:

```
private void jbInit(String title,
                      Object[][] inputData) 
          throws Exception 
  {
    Document docOut = new Document();
    Element root = new Element("RESULT");
    docOut.setRootElement(root);
    
    Element calc = new Element("CALCULATION");
    calc.setAttribute("id", title);
    root.addContent(calc);
    
    Element input = new Element("INPUT");
    calc.addContent(input);
    
    Element[] inValue = new Element[inputData[0].length];
    System.out.println(inputData[0].length);
    for (int i = 0; i < inValue.length; i++) 
    {
      inValue[i] = new Element("IN" + Integer.toString(i));
      inValue[i].setAttribute("value", inputData[0][i].toString());
      inValue[i].setText(inputData[1][i].toString());
      input.addContent(inValue[i]);
    }
    
    PrintWriter pw = new PrintWriter( new File( "output.xml" ) );
    XMLOutputter xout = new XMLOutputter( Format.getPrettyFormat() );
    xout.output( docOut, pw ); 
    System.out.println("File created");
  }
```

Danke
chrissy


----------



## Wildcard (28. Mrz 2007)

In XML müssen Sonderzeichen markiert werden.
http://www.rss-forum.de/showtopic.php?threadid=4
2ter Google Treffer.


----------



## chrissy (28. Mrz 2007)

danke für den Hinweis ...
dass heißt ich muss alle meine Strings auf Umlaute überprüfen und diese durch den Unicode ersetzen???

Ä      Ä
Ö      Ö
Ü      Ü
ä      ä
ö      ö
ü      ü
ß      ß

Oder wie müssen die Zeichen markiert werden?
Sorry hab noch net viel mit XML gearbeitet ...
Es würde mich weiterhin interessieren, ob man die Codierung beim Erstellen des Files ändern kann.

Danke
chrissy


----------



## kleiner_held (28. Mrz 2007)

```
FileOutputStream fOut= new FileOutputStream ( new File( "output.xml" ) );
Format format = Format.getPrettyFormat();
format.setEncoding("UTF-8"); //eigentlich unnoetig, das default encoding von JDom ist UTF-8
XMLOutputter xout = new XMLOutputter(format);
xout.output( docOut, fOut );
System.out.println("File created");
```

Das Problem liegt meiner Meinung nach im PrintWriter. Wenn man einen Writer anstatt einen OutputStream nimmt, hat JDOM keinen Einfluss auf das Encoding von Strings zu Bytes, der Writer nimmt das Default encoding des OS. Dann steht im XML Header das UTF-8 von JDom drin (da dieser von JDOM generiert wird) aber die Datei ist in Wirklichkeit ISO-8859-1 (Default bei Windows) codiert.

Gruss


----------



## chrissy (28. Mrz 2007)

danke "großer" Held,

so funktioniert es super ...


----------

