# UTF8 in ISO8859 umwandeln



## JoFl (10. März 2005)

Hallo,

ich habe ein Programm, dass einen UTF-8 String erhält und diesen in eine Datei im ISO8859-1(5) schreiben soll.
Leider bekomme ich keine gescheiten Inhalte heraus. Entweder verwurstelt der den UTF8 noch mehr oder es kommt gar nichts mehr zurück.

Hat jemand eine Idee, wie man soetwas schnell und einfach lösen kann?

Danke!


----------



## yves030 (12. März 2005)

Die String Klasse hat m.W.n. bereits alles an Board....:

 EinUTFString.getBytes("UTF-8");  ergibt ein byte[] array eines utf-8 codierten Strings

 ISOString = new String(EinUTFString.getBytes("UTF-8"),"ISO-8859-1");

 ist somit vielleicht das, was du suchst? Oder liegt deine Quelle vielleicht als Stream und
 nicht als String vor?

 yves030


----------



## JoFl (16. März 2005)

Danke schonmal.

Diese Lösung hatte ich auch schon versucht, bekomme dann aber den String von ü in Ã¼ umgewandelt. Speichere ich den Text gleich in die Datei (ohne die oben genannte Möglichkeit zum ändern des Charsets) erhalte ich auch ein Ã¼ in der Datei.
Nutze ich die Konvertierung sieht das ganze dann in der Datei folgendermaßen aus: ÃƒÂ¼.

Die Variable wird von einer anderen Methode übergeben. Hier habe ich schon versucht den request zu übergeben oder die Daten aus einer XML-Datei auszulesen. Beides jedoch mit dem gleichen Ergebnis.

Hier mal die Methode, die ich zum speichern verwende:


```
public void saveTextInJs(View myView, String fileLocation, String text)
{
    try
    {
        FileOutputStream fo = new FileOutputStream(fileLocation);
        PrintWriter pw = new PrintWriter(fo);
        String ISOString = new String(text.getBytes("UTF-8"),"ISO-8859-1");

        pw.println("message=\"" + ISOString + " \""); // hier habe ich vorher text direkt drin stehen gehabt
        pw.flush();
        pw.close();
    }
    catch (Exception e)
    {
        cat.error(e.toString());
    }
}
```


----------



## JoFl (16. März 2005)

Kann es evtl. auch sein, dass der String bereits ISO ist und Java diesen nur beim speichern in UTF-8 umwandelt?


----------



## yves030 (16. März 2005)

hi,

 ich habe das jetzt mal ausprobiert... nur zu lesen, was die API hergibt und es
 dann erfolgreich anzuwenden sind halt manchmal doch 2 verschiedene Dinge.

 Das dürfte Dein Problem lösen:


```
public static void main(String[] args) {
 		String UTF="Ã¶Ã¤Ã¼ÃŸÃ„Ã–Ãœ";
 		System.out.println (UTF);
 		try {
 			System.out.println (new String (UTF.getBytes(),"UTF-8"));
 		} catch (UnsupportedEncodingException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 	}
```


----------



## JoFl (16. März 2005)

*Re: UTF8 in ISO8859 umwandeln [solved]*

Ich hab den Fehler inzwischen gefunden.
Das Problem war wirklich, dass Java den String autom. beim Speichern in die vorgegebene Konvention umwandelt. Somit hatte ich einen ISO String (vom Browser her übergeben bekommen), den Java dann beim speichern in UTF8 umgewandelt hat.
Gibt man nun beim OutputStreamWriter das entsprechende Charset (ISO-8859-1) an wird die Textdatei auch entsprechend gespeichert und alles ist wunderbar .

Dank dir auf jeden Fall für die Mühe


----------



## orkus9 (17. März 2005)

Ich denke nicht, dass deine Probleme damit gelöst sind.
Die Frage ist nicht, WIE  man UTF8 Strings/Dateien in ISOXXXX umwandelt,
sondern WARUM  man diese tut!

Viele Leute verstehen (fälschlicher weise) UTF8 als eine Erweiterung von ISOXXXX.
Dies ist NICHT der Fall. UTF8 ist das Standartencoding heutzutage, warum sollte man einen Schritt zurück machen und ISOXXXX verwenden?

Konkret zu deiner Frage:
Java-Quellcode sollte auf jeden Fall in UTF8 abgespeichert werden. Alle von Java 
generierten Dateien sowieso. Warum das gemacht werden sollte, kannst du auf dutzenden Seiten nachlesen.   Dies würde den Thread hier sprengen 
Wenn du Probleme bei der Darstellung der Java-erzeugten
Datei hast, liegt es an deinem Editor. Dummerweise sind die meisten Editoren nicht auf 
UTF8 enconding eingestellt (warum auch immer ist mir ein Rätsel).
Lade einfach einen Editor runter, wo du das Encoding ändern kannst und schon passt die sache.

Mache nicht den Anfängerfehler und spiele mit ISOXXXX encoding rum. Bei großen Anwendungen führt das über kurz oder lang zu eventuell sehr schwer zu findenden Fehlern.

Darum mein Tip (aus Erfahrung):

Speichere sowohl den Java-Quellcode, wie auch alle anderen Dateien (z.B. erzeugte Dateien) in UTF8. Dann hast du keine Probleme. Wenn du z.B. eine Datei einliest, die 
nicht in UTF8 ist, wandle diese erst in UTF8 um und bearbeite diese erst dann.

Schöne Grüße

orkus9


----------



## JoFl (18. März 2005)

Du hast das falsch verstanden .

Ich muss eine JavaScript Datei erstellen, in der lediglich ein Text auf eine Variable zugewiesen wird, welche dann von einer HTML-Datei als .js geladen wird. Dies ist notwendig, da es sich hierbei um ein CMS System handelt. Diese .js Datei allerdings ist für JavaScript komplett untauglich, wenn sie in UTF8 geschrieben ist, da dort komischerweise nur ISO angezeigt wird.

Bei Dateien, die Java speichert und wieder ausliest (oder XML) spielt das ganze natürlich keine Rolle, aber in diesem speziellen Fall leider schon.

In welchem Format ich die Sourcen speichere spielt primär keine Rolle, da dies nur Sache des Editors ist. Theoretisch benötige ich nur den ASCII-Zeichensatz um programmieren zu können . Auch ist die Implementierung von UTF8 in Windows nicht gerade berauschend. UTF8 daher als Standard zu sehen würde ich mal gut 2 Jahre in die Zukunft verschieben.


----------

