# ASCII in UniCode umwandeln?



## Daniel_L (11. Sep 2008)

Hallo,

ich hab hier mal gesucht, aber auch bei Google, und habe auch etwas gefunden zum Thema, aber offensichtlich nicht das richtige, oder ich war zu blöd es umzusetzen.

Ich habe eine Datei, die unter Windows im ASCII-Format gespeichert wurde. Diese möchte ich nun in Java (Mac) einlesen und ins Unicode konvertieren. Ich verwende dazu einen FileReader:



```
buffer = new StringBuffer("");                        
fr = new FileReader(filepath);
int c;

while ((c=fr.read()) != -1) {                            
  if(c!=0) {
    char chr = (char)c;
    buffer.append(chr);
  }
}
```

kann mir vll. jemand auf die Sprünge helfen, wie ich diese ascii-datei in unicode umwandel? Hatte schonmal dies hier und auch sowas hier angeguckt, aber irgendwie konnte ich das nicht umsetzen.

Vielen Dank und Griß
Daniel


----------



## Wildcard (11. Sep 2008)

reines ASCII ist erstmal kein Problem. Ich vermute du hast Umlaute verwendet und in cp1252 kodiert?


----------



## Daniel_L (11. Sep 2008)

ich habe unter windows c++ ein programm geschrieben, das die texteingaben (aus einer RichTextBox) als einfachen ASCII-String speichert. d.h. in der datei hat ein "ä" bspw. den zahlenwert 228 usw.

kodiert habe ich gar nichts, sondern den string einfach per "<<" in eine datei geschrieben, also ohne jegliche kodierung anzugeben.


----------



## Wildcard (11. Sep 2008)

Dann hast du mit cp1252 kodiert. Es handelt sich um ein reines Windows Encoding und ich bin nicht sicher, ob Mac Java es überhaupt unterstützt.
Falls ja, dann geht es so:
Du erstellst einen InputStreamReader mit dem Encoding "Cp1252" und liest damit.


----------



## Daniel_L (11. Sep 2008)

Vielen Dank, das probier ich mal aus. Hier noch kurz zwei Beispiele, wie die Wörter dann in Java "ankommen":

Illegalit‚Ä∞t (Illegalität)
f¬∏r (für)


----------



## Wildcard (11. Sep 2008)

Ich würde dir empfehlen Text jeglicher Art auf allen Plattformen nur noch als Unicode zu speichern. Alles andere führt nur zu Problemen.


----------



## Daniel_L (11. Sep 2008)

Genau das war für mich auch ein Grund, auf Java umzusteigen.  Einmal Programme zu haben, die auf mehreren Plattformen laufen, zum anderen der einfache Umgang mit Unicode (und mit diesem Zeichenformat eben auch die Möglichkeit, verschiedenste Schriftzeichen/Sprachen verwenden zu können).

Ich werde das morgen mal ausprobieren, sollte eigentlich nicht allzu schwer sein. Vielen Dank noch mal!


----------



## HoaX (12. Sep 2008)

auch mit java kannst du dir da in den Fuß schießen. z.B. mit dem FileReader/Writer. Der verwendet das Standardencoding des OS wodurch die ausgabe auf unterschiedlichen Systemen/Benutzeraccounts unterschiedlich sein kann


----------



## Daniel_L (12. Sep 2008)

Ich verwende den FileReader nur einmal zum Einlesen. Dann konvertiere ich die "alte" Datenstruktur um in XML und lese/schreibe mit JDOM resp. SaxBuilder. Ich hoffe, dass da das Encoding nichts ausmacht bzw. nicht relevant ist?


----------



## Leroy42 (12. Sep 2008)

Daniel_L hat gesagt.:
			
		

> .das die texteingaben...als einfachen ASCII-String speichert. d.h. in der datei hat ein "ä" bspw. den zahlenwert 228 usw.



Wenn der String ein 'ä' enthält, kann er kein ASCII-String sein!


----------



## Leroy42 (12. Sep 2008)

Daniel_L hat gesagt.:
			
		

> Ich hoffe, dass da das Encoding nichts ausmacht bzw. nicht relevant ist?



Doch! Wenn der String Umlaute enthält ist das Encoding ausschlaggebend.

ASCII-_Code_ ist nur im Bereich [0..127] definiert und jedes System speichert Umlaute in
ASCII-_Dateien_ anhand von Encodings.


----------



## Daniel_L (15. Sep 2008)

So, eigentlich macht Codepage 1252 ja Sinn, wie ich auch aus Wikipedia erfahren habe, aber korrekt wird die Datei immer noch nicht eingelesen. Nun sind Umlaute immer durch ein Häkchen plus kryptisches Zusatzzeichen ersetzt, z.B.:

f√ºr

Hier mal der Source-Code:

```
buffer = new StringBuffer("");                        
            InputStream is = new FileInputStream(filepath);
            InputStreamReader ips = new InputStreamReader(is,"cp1252");
            
                        while ((c=ips.read()) != -1) {                            
                                char chr = (char)c;
                                buffer.append(chr);
                        }
```

Wenn ich die Datei mit Smultron öffne, zeigt der als Kodierung "Westeuropäisch, ISO Latin-1" an. Wie würde dieser Parameter denn heißen, wenn ich ihn im Konstruktor des InputStreamReaders verwenden möchte?


----------



## sparrow (15. Sep 2008)

```
InputStreamReader ips = new InputStreamReader(is,"ISO-8859-1");
```

Vergleiche: http://de.wikipedia.org/wiki/ISO-8859-1


----------



## Daniel_L (15. Sep 2008)

Gut, mein Fehler. cp1252 ist die richtige Kodierung, aber ich hab mir das Ergebnis nur im Log angeguckt (über XMLoutputter output(xml-file,system.out). Nun habe ich mir das Ergebnis mittels outputString in einen JEditorPane schreiben lassen, und alles sieht perfekt aus! Vielen Dank für eure Hilfen!


----------



## Wildcard (15. Sep 2008)

Daniel_L hat gesagt.:
			
		

> Gut, mein Fehler. cp1252 ist die richtige Kodierung


Sag ich doch  :wink: 
*Haken setz*


----------

