有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

即使终端配置正确,Java也无法显示Unicode字符

我试图在Cygwin中运行的Java应用程序中打印Unicode block character。尽管终端被设置为UTF-8,尽管Bash和Python能够打印字符,但Java只是打印一个?

$ 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
?

这似乎是Cygwin特有的,当从cmd运行时,会显示以下字符:

>java -cp . Block
█

我能做些什么让Cygwin/mintty正确呈现Java的输出吗

更新

Windows/Cygwin上的Java似乎没有实际使用LANG环境变量,因此实际上仍在使用cp1252:

$ 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
?

但奇怪的是,我无法工作:

$ java -cp . Block | iconv -f WINDOWS-1252 -t UTF8
Default Charset=windows-1252
?

共 (0) 个答案