【发布时间】:2023-04-05 20:55:01
【问题描述】:
我正在尝试在 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
?
但奇怪的是我无法让iconv 工作:
$ java -cp . Block | iconv -f WINDOWS-1252 -t UTF8
Default Charset=windows-1252
?
【问题讨论】: