【发布时间】:2020-09-02 19:05:36
【问题描述】:
我有以下代码
public class MainDefault {
public static void main (String[] args) {
System.out.println("²³");
System.out.println(Arrays.toString("²³".getBytes()));
}
}
但似乎无法将特殊字符打印到控制台
当我执行以下操作时,我得到以下结果
$ javac MainDefault.java
$ java MainDefault
另一方面,当我像这样编译并运行它时
$ javac -encoding UTF8 MainDefault.java
$ java MainDefault
当我使用文件编码 UTF8 标志运行它时,我得到以下信息
$ java -Dfile.encoding=UTF8 MainDefault
控制台(Windows 10 上的 Git Bash)似乎没有问题,因为它可以正常打印字符
感谢您的帮助
【问题讨论】:
-
组成字符串 -62,-78,-62,-77 的数字序列是(作为无符号字节)0xC2,0xB2,0xC2,0xB3。这些是屏幕截图中出现的 ASCII 框字符的 CP437 值。这些值也可能出现在其他字符集中,但不会出现在 UTF-8 甚至 ISO-88591-1 中。看起来好像正在编译的文件不是 UTF-8,或者显示输出的终端未设置为显示 UTF-8。如果问题出在文件的编码中,那么 System.out.println("\u00B2\u00B3") 应该会产生正确的输出,因为这些是 ²³ 的 Unicode 转义
-
我在 Mac 和 Git Bash for Mac 上得到了预期的输出。可能是 Windows 的问题。
标签: java encoding utf-8 compilation character-encoding