Ich möchte russische und deutsche Zeichen in Windows-Konsole drucken. Also habe ich ein kleines Testprogramm geschrieben, um zu verstehen, wie gut es funktioniert:
%Vor%Dann habe ich cmd.exe gestartet, die Schriftart in Lucida Console geändert, die Unicode unterstützt, die Codepage mit "chcp 65001" in Unicode geändert und mein Programm ausgeführt.
Die deutschen und russischen Schriftzeichen wurden gedruckt, aber es gab etwas mehr Text als ich erwartet hatte (rot unterstrichen):
Aber der Text wird korrekt in der Eclipse-Konsole gedruckt. Gibt es eine Möglichkeit, es korrekt in der Windows-Konsole zu drucken? Ich benutze Windows 7.
Ich habe gerade das Problem mit JNI gelöst, aber es ist immer noch interessant, ob es mit reinem Java machbar ist.
Nachdem ich die Antworten und Empfehlungen gelesen hatte, kam ich zu dem Schluss, dass es ein Problem mit JRE geben muss. Vielleicht existiert dieses Problem nur in Windows 7 (leider habe ich keine anderen Windows-Systeme zum Experimentieren).
Die Lösung besteht darin, JNI zu verwenden, oder wenn Sie eine einfachere Lösung wünschen, verwenden Sie JNA. Ich habe ein nützliches JNA-Beispiel gefunden, das mein Problem löst, hier Ссылка
Jedes Mal, wenn Sie eine Datei öffnen oder schreiben, wird eine bestimmte Kodierung angewendet. Aber manchmal vergessen wir, dass auch unsere IDE (Eclipse in Ihrem Fall) eine Kodierung hat.
Wenn Sie einen bestimmten Text zwischen Anführungszeichen eingeben, wird er in einer bestimmten Kodierung, der Kodierung Ihrer IDE, angezeigt und eingetippt. Ihre Annahme ist, dass die Kodierung Ihres Ausgabestroms (UTF-8) auch garantiert, dass der Text mit dieser spezifischen Kodierung angezeigt wird. Ich denke aber auch hier wird wieder die Codierung Ihrer IDE angewendet.
Ich würde vorschlagen, Ihre Codierung von Eclipse zu überprüfen. Vielleicht kann das dein Problem lösen. Sicherlich einen Versuch wert, oder? :)
Fügen Sie bei einer globalen Codierung den folgenden Code zur Datei eclipse.ini hinzu:
%Vor%BEARBEITEN:
Ich möchte nur folgendes hinzufügen. Ich führte die folgenden Schritte als ein Experiment durch.
Dies bestätigt nicht viel, aber es bestätigt die Tatsache, dass DOS die Aufgabe erfüllen kann, wenn der Inhalt in der richtigen Kodierung vorgesehen ist.
EDIT2:
@ ka3ak Es ist über zwei Jahre her, aber während ich ein Buch über Java I / O gelesen habe, bin ich auf Folgendes gestoßen:
System.console().printf(...)
unterstützt Sonderzeichen besser als die MethodeSystem.out.println(...)
.
Da PrintStream
nur den System.out
-Stream umschließt, haben Sie vermutlich dieselben Einschränkungen. Ich frage mich, ob dies das Problem hätte lösen können. Wenn es immer noch wichtig ist, versuchen Sie es bitte. :)
Andere Posts auf stackoverflow melden ähnliche Dinge: console.writeline und System.out.println
Dies liegt an der Implementierung von cp65001 in Windows. Weitere Informationen finden Sie in der Antwort von eryssun .
Kurze Zusammenfassung: Nur 7-Bit (sic!) Eingabe / Ausgabe funktioniert zuverlässig in cp65001 (es sei denn eine CRTL führt Umgehungen) bis Windows 7. Das Problem mit der Ausgabe ist in Windows 8 behoben. Das Problem mit der Eingabe ist in vorhanden Windows 10.