# ISO-8859-1 >> UTF-8  + JDOM + Verwirrung.



## muckelzwerg (11. Jul 2006)

Hallo,

ich bin gerade leicht verwirrt, was Encodings in JDOM und JAVA angeht.
Ich muss einen String von einem Soap Webservice verarbeiten.
Der String ist ein XML-Dump aus einer Datenbank (WindowsSystem), enthält aber keine Encodinginformationen.

Ich bekomme den String von axis zurück und schreibe ihn direkt in eine Datei.
>> JDOM importiert die Datei mit Defaultencoding (UTF-8), da kein Encoding angegeben ist. und gibt mir den hier :
Zeichenumwandlungsfehler: "UTF-8 encoding of character 0x001b796e can't be converted to Unicode."

daraus kann ich doch schließen, dass der String als ISO-8859-1 ankommt ?
Das Zeichen müsste ein "ö" sein. (wo schlag ich das nach ?)

also füge ich in die Datei (bzw in den String)  "<?xml version="1.0" encoding="ISO-8859-1"?>" ein.
>> JDOM importiert die Datei problemlos.

Aus diesen Daten erzeuge ich eine neue XML Datei, diesmal UTF-8 codiert.(JDOM Standard)
Schau ich mir die neue Datei im Browser an wechselt er auf UTF-8 und die Umlaute stimmen.
Somit sollte seitens JDOM soweit alles passen ?

Jetzt möchte ich nur gern die Dateien einheitlich haben, und den empfangen String auch in UTF-8 speichern.


```
String data = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + System.getProperty("line.separator") + SOAPHOLESTRING(...) ;

byte [] b = data.getBytes( "ISO-8859-1");           
String data2 = new String ( b, "UTF-8" );
data2 ---> datei;
```
Schaue ich die Datei im Browser an bekomme ich "?" statt "ö". Ändert sich auch nicht, wenn ich das Encoding
per Hand von UTF-8 auf ISO-8859-1 ändere.

Wo ist denn da nun der Fehler ?

thx

  --  --  muckelzwerg


----------



## dodo (11. Jul 2006)

Hi,

versuchs mal mit:

System.setProperty("file.encoding","UTF-8");

ich glaub default ist: ANSI_X3.4-1968


gruß
dodo


----------



## muckelzwerg (12. Jul 2006)

Danke das hat mir um 3 Ecken rum geholfen.
Problem war simpel :
Ich hab nen Filewriter benutzt, der verwendet das Standardencoding,
da kann ich vorher machen, was ich will.
Jetzt hab ich Folgendes :

```
Reader( BufferedReader( StringReader( <String> ) ) )
Writer( BufferedWriter( OutputStreamWriter( <File>, "UTF-8"));
```
Und dann kopiere ich über einen char[] Buffer einmal alles rüber.

Soweit richtig ? Verbesserungsvorschläge ?

Was ich nicht verstehe :
Den String brauche ich jetzt nicht mehr umcodieren.
Intern sind alle Java Strings UTF-16, aber woher weiß Java, wie es den String zu interpretieren hat ?

  --  --  muckelzwerg

[edit]
Kann man seine eigenen Threads nicht "abhaken" ?
[/edit]


----------

