Zum umleiten aller Konsolenausgabe des Swing JTextArea/JTextPane mit der richtigen Codierung?
Ich habe versucht, redirect-System.out PrintStream, um eine JTextPane. Dies funktioniert gut, außer für die Codierung von speziellen Gebietsschema-Zeichen. Ich fand eine Menge an Dokumentation darüber (siehe BSP. mindprod-Kodierung-Seite), aber ich bin immer noch mit Ihr kämpfen. Ähnliche Fragen wurden veröffentlicht in StackOverFlow, aber die Codierung war nicht angesprochen soweit ich das gesehen habe.
Erste Lösung:
String sUtf = new String(s.getBytes("cp1252"),"UTF-8");
Zweite Lösung soll die Verwendung von java.nio. Ich verstehe nicht, wie die Charset.
Charset defaultCharset = Charset.defaultCharset() ;
byte[] b = s.getBytes();
Charset cs = Charset.forName("UTF-8");
ByteBuffer bb = ByteBuffer.wrap( b );
CharBuffer cb = cs.decode( bb );
String stringUtf = cb.toString();
myTextPane.text = stringUtf
Weder Lösung funktioniert. Irgendeine Idee?
Vielen Dank im Voraus,
jgran
- off-topic-Frage: warum die beiden Benutzer - jgran(OP) und jgran(Beantworter:stackoverflow.com/questions/1522444/...)?
- Mein Fehler... sollte die FAQ mehr ernst. Also die gleichen Benutzer!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diesen code:
write()
automatisch aufrufenflush()
?String in java nicht haben eine Codierung - Strings werden unterstützt durch ein Zeichen-array, und der Charakter sollte immer utf-16, während Sie behandelt werden als strings und char-Werte.
Die Codierung nur in Frage kommt, wenn Sie exportieren oder importieren strings/chars, oder eine externe Darstellung (oder Standort). Die übertragung erfolgt über eine Sequenz von bytes, die zur Darstellung der Zeichenfolge.
Ich denke, die erste Lösung liegt nahe, aber auch völlig verwirrt. Ersten Sie bitten, java zu übersetzen, die char-Werte, um Ihre cp1252-kodiert-äquivalent-Werte (das " Wort'für die ähnlich geformten Zeichen in der cp1252 'Sprache'). Dann erstellen Sie eine Zeichenfolge, die von dieser byte-Sequenz, die besagt, dass diese Sequenz von cp-1252-codes ist in der Tat eine Sequenz von utf-8-codes und sollte übersetzt werden, die standard in-memory-Darstellung (utf-16) aus utf-8.
String ist nie utf og cp1252 oder so etwas - es ist alsways Zeichen. Nur byte-Sequenzen sind utf-8 und cp1252. Wenn Sie übersetzen möchten, die char-Werte in eine utf-8-Zeichenfolge, die Sie nutzen könnten.
Tatsächlich, ich denke, das problem liegt woanders, wahrscheinlich innerhalb der printstream und wie druckt er die Eingabe. Sie sollten versuchen zu vermeiden, konvertieren von strings und chars/bytes, denn das ist immer eine große Quelle für Verwirrung und ärger. Vielleicht müssen Sie überschreiben alle Methoden, um zu erfassen, Charakter-Daten vor der Konvertierung.
Da Sie zu Recht davon ausgehen, das problem ist wahrscheinlich:
da die Kodierung mit UTF-8 Zeichen kann kodiert werden mit mehr als 1 byte und damit das hinzufügen jedes byte, die Sie als Zeichen gelesen, wird nicht funktionieren.
Damit es funktioniert, können Sie versuchen, zu schreiben bytes in einen ByteBuffer und mit einem CharsetDecoder (Charset.forName("UTF-8").newDecoder(), "UTF-8" entsprechend der PrintStream) zu konvertieren, Sie in Zeichen, die Sie hinzufügen panel.
Ich habe es nicht versucht, um sicherzustellen, dass es funktioniert, aber ich denke, es ist einen Versuch Wert.
Sollten Sie die PrintStream mit der rechten encode: http://www.j2ee.me/j2se/1.5.0/docs/api/java/io/PrintStream.html#PrintStream(java.io.Datei, java.lang.String)
Könnten Sie bitte mehr code über das, was Sie zu tun versuchen?