Ich versuche, das Unicode block character in einer Java-Anwendung zu drucken, die in Cygwin ausgeführt wird. Obwohl das Terminal auf UTF-8 eingestellt ist und trotz Bash und Python das Zeichen drucken kann, druckt Java einfach ?
.Java kann keine Unicode-Zeichen anzeigen, obwohl das Terminal ordnungsgemäß konfiguriert ist
$ echo $LANG
en_US.UTF-8
$ echo -e "\xe2\x96\x88"
█
$ python3 -c 'print("\u2588")'
█
$ cat Block.java
public class Block {
public static void main(String[] args) {
System.out.println('\u2588');
}
}
$ javac Block.java
$ java -cp . Block
?
Dies erscheint als Cygwin spezifisch zu sein, wenn sie von cmd das Zeichen laufen angezeigt:
>java -cp . Block
█
Gibt es etwas, was ich tun kann Cygwin/mintty zu machen Java korrekt ausgegeben zu bekommen?
aktualisieren:
Es scheint Java auf Windows/Cygwin verwendet nicht tatsächlich die LANG
Umgebungsvariable, und ist daher nach wie vor eigentlich cp1252 mit:
$ cat Block.java
public class Block {
public static void main(String[] args) {
System.out.println("Default Charset=" + java.nio.charset.Charset.defaultCharset());
System.out.println("\u2588");
}
}
$ java -cp . Block
Default Charset=windows-1252
?
Aber seltsam kann ich nicht erhalten iconv
zu arbeiten:
$ java -cp . Block | iconv -f WINDOWS-1252 -t UTF8
Default Charset=windows-1252
?
'iconv' wird nicht helfen, weil' █' in erster Linie nicht in Windows-1252 codiert werden kann (und java wird '' 'stattdessen drucken) – roeland
@roeland Warum wird es dann korrekt von einem (windows-1252) cmd Eingabeaufforderung? – dimo414
Da einige Programme Windows-spezifische Funktionen zum Drucken von Text verwenden. Unabhängig von Ihrer Codepage kann 'WriteConsoleW (...)' beispielsweise beliebigen Unicode-Text auf der Konsole ausgeben. – roeland