Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
JFileChooser chooser = new JFileChooser(); chooser.showSaveDialog(null); try { BufferedWriter out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(chooser.getSelectedFile()), "Cp850")); String s = plaintextArea.getText(); for(int i=0 ; i<s.length() ; i++) { out.write(s.charAt(i)); } out.close(); } catch (IOException ioe) { } catch(NullPointerException npe) { } |
Java source code |
|
1 |
out.write(s); |
Turner, Serveradmin & Workaholic
Date of registration: Apr 25th 2006
Location: Südstadt
Occupation: (iter (B.Sc. Inf, 8)) \n (be-a-slave ("SRA", "Bachelor Thesis")) \n (be-a-programmer-slave ("Freelancer", "Programming"))
Da Java intern mit UTF-8 arbeitet
Hilft leider auch nicht. Es besteht dasselbe Problem wie davor! Vielleicht liegt es ja auch gar nicht am Ein- und Auslesen, sondern an der Darstellungsfähigkeit der JTextArea!? Hat dazu vielleicht jemand eine Idee?
This post has been edited 1 times, last edit by "kiLLroy" (Jul 17th 2008, 9:37pm)
Guru
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Ich würde eher an dieser Stelle ansetzen. Was versprichst Du Dir davon, den Chiffretext unbedingt auf diese Weise einzugeben/darzustellen? Die Kombination der so auftretenden nicht-darstellbaren Zeichen mit einer Texteditor-Komponente, die für sowas bestimmt nicht ausgelegt ist, schreit doch geradezu nach Problemen. Schau Dir für diesen Zweck lieber Kodierungen wie etwa Base64 an oder lies den Chiffretext direkt aus einer Datei.In der GUI (Swing) habe ich ein Feld für Eingabe eines Klartextes und ein Feld für Ein-/Ausgabe des Chiffretext. Der Chiffretext enthält dann sehr viele Sonderzeichen (z.B. ein Auszug: v@KÕ±G qB`%RÕí]¯ÉÆ!).
This post has been edited 2 times, last edit by "Joachim" (Jul 17th 2008, 10:04pm)
This post has been edited 2 times, last edit by "ctk" (Jul 17th 2008, 10:43pm)
Und? Wie hast du es dann hingekriegt? Hast du doch, oder?
Da Java intern mit UTF-8 arbeitet
More like UTF-16.
Nach außen hin ist trotzdem prinzipiell immer alles kaputt. Java-Anwendungen sind auch immer die ersten, die auf nem Mac UTF-8 noch als MacRoman darzustellen versuchen Durfte ich auch gerade erst debuggen, auch in einer kryptografischen Anwendung (keysign.org ), und mir fällt gerade eine Stelle ein, die ich bisher nur mit ASCII getestet habe. Uh-oh...
Also ich der Code zum Laden eines Inhalts aus einer Textdatei in die JTextArea ist wie folgt:Wie lädst du denn den den Inhalt der Textdatei in die Textarea? Doch hoffentlich mit Java oder? Windows verwendet IMHO nämlich nicht cp850 sondern ANSI wenn du die Datei einfach in Notepad öffnest und in die Area einfügst.
Source code |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Laden eines Klartexts aus einer Datei JFileChooser chooser = new JFileChooser(); chooser.showOpenDialog(null); // Löschen der Textarea plaintextArea.setText(""); String s; try { BufferedReader in = new BufferedReader( new InputStreamReader( new FileInputStream(chooser.getSelectedFile()), "UTF-8")); while( null != (s = in.readLine()) ) { plaintextArea.setText(plaintextArea.getText()+s); } in.close(); } catch (IOException ioe) { } catch(NullPointerException npe) { } |
Das Problem tritt erst auf, wenn ich den Inhalt der Datei mit den vielen Sonderzeichen wieder in Java einlesen und in die JTextArea schreiben will. Ob die Zeichen in der Datei richtig angezeigt werden hängt davon ab, mit welchem Editor ich sie mir angucke. Notepad kann z.B. gar nichts (man sieht fast nur blanks). JEdit dagegen zeigt (glaube ich, wie soll man da sicher sein?) alle Sonderzeichen richtig an.Heißt das jetzt wenn du den String, den du in das Eingabefeld eingegeben hast, einfach printest wird er bereits (bzw. einige Zeichen davon) falsch ausgegeben? Oder evtl. besser: Wenn du den eingegebenen String in eine Datei schreibst, sind die Zeichen in der Datei dann schon falsch, oder alles erst beim wieder-einlesen?
Über Base64 habe ich auch schon nachgedacht. Aber ich möchte gerne, dass man den Chiffretext auch ansehen kann. Das ist ja eine nicht allzu vermessene kryptografische Forderung, oder ? Außerdem muss ja irgendeine vernünftige Lösung für dieses Problem in Java geben!?Ich würde eher an dieser Stelle ansetzen. Was versprichst Du Dir davon, den Chiffretext unbedingt auf diese Weise einzugeben/darzustellen? Die Kombination der so auftretenden nicht-darstellbaren Zeichen mit einer Texteditor-Komponente, die für sowas bestimmt nicht ausgelegt ist, schreit doch geradezu nach Problemen. Schau Dir für diesen Zweck lieber Kodierungen wie etwa Base64 an oder lies den Chiffretext direkt aus einer Datei.
This post has been edited 1 times, last edit by "julianr" (Jul 18th 2008, 5:20pm)
Guru
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Vermessen nicht, aber IMHO völlig überflüssig. Welchen Nutzen versprichst Du Dir davon?Über Base64 habe ich auch schon nachgedacht. Aber ich möchte gerne, dass man den Chiffretext auch ansehen kann. Das ist ja eine nicht allzu vermessene kryptografische Forderung, oder ?
Guru
Date of registration: Dec 11th 2001
Location: Hämelerwald
Occupation: Wissenschaftlicher Mitarbeiter (Forschungszentrum L3S, TU Braunschweig)
Keine Ahnung, woran es nun liegt, aber ich schätze, daß JTextArea und Co. für solche Anwendungszwecke einfach nicht gemacht sind. Gerade Steuerzeichen und ähnliches sind hier sicherlich problematisch. Es ist nun einmal schwierig, in einem Texteditor "carriage return", "backspace", "soft hyphen" usw. brauchbar darzustellen.Das gibt es doch aber gar nicht, dass das in Java so ein Problem ist.
Das Problem tritt erst auf, wenn ich den Inhalt der Datei mit den vielen Sonderzeichen wieder in Java einlesen und in die JTextArea schreiben will. Ob die Zeichen in der Datei richtig angezeigt werden hängt davon ab, mit welchem Editor ich sie mir angucke.Heißt das jetzt wenn du den String, den du in das Eingabefeld eingegeben hast, einfach printest wird er bereits (bzw. einige Zeichen davon) falsch ausgegeben? Oder evtl. besser: Wenn du den eingegebenen String in eine Datei schreibst, sind die Zeichen in der Datei dann schon falsch, oder alles erst beim wieder-einlesen?
Notepad kann z.B. gar nichts (man sieht fast nur blanks). JEdit dagegen zeigt (glaube ich, wie soll man da sicher sein?) alle Sonderzeichen richtig an.
Source code
1 2 3 4 5 ... new FileInputStream(chooser.getSelectedFile()), "UTF-8")); ...
Source code
1 2 3 4 5 ... new FileOutputStream(chooser.getSelectedFile()), "Cp850")); ...
Ne, das habe ich damals beim rumprobieren nur einmalkurz so gehabt. Ich schreibe und lese immer denselben Zeichensatz. Daran liegt es leider nicht!
Source code
1 2 3 4 5 ... new FileInputStream(chooser.getSelectedFile()), "UTF-8")); ...
Source code
1 2 3 4 5 ... new FileOutputStream(chooser.getSelectedFile()), "Cp850")); ...
Da ist doch der Fehler: Du Schreibst mit cp850 und liest mit UTF-8. Du musst dich schon für einen Zeichensatz entscheiden.
Der Nutzen ist kryptographischer Natur. Wenn ich zum Beispiel einen Chriffretext erstelle, dann kann es sinnvoll zur Analyse des Kryptosystems sein, den Chriffretext z.B. an einzelnen Stellen zu verändern und die entstehende Veränderung der nach Entschlüsselung entstehenden Klartexte zu analysieren.
Vermessen nicht, aber IMHO völlig überflüssig. Welchen Nutzen versprichst Du Dir davon?Über Base64 habe ich auch schon nachgedacht. Aber ich möchte gerne, dass man den Chiffretext auch ansehen kann. Das ist ja eine nicht allzu vermessene kryptografische Forderung, oder ?