ASCII in UniCode umwandeln?

Status
Nicht offen für weitere Antworten.

Daniel_L

Bekanntes Mitglied
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:


Code:
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
 
reines ASCII ist erstmal kein Problem. Ich vermute du hast Umlaute verwendet und in cp1252 kodiert?
 
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.
 
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.
 
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)
 
Ich würde dir empfehlen Text jeglicher Art auf allen Plattformen nur noch als Unicode zu speichern. Alles andere führt nur zu Problemen.
 
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!
 
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
 
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?
 
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.
 
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:
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?
 
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!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben