扩展的Ascii在控制台中不起作用!

例如System.out.println(“╚”); 显示为?,同样适用于System.out.println(“\ u255a”);

为什么这不起作用? Stdout确实支持这些角色所以我不明白。

Windows命令提示符默认使用旧的DOS OEM编码。 System.out使用默认的系统编码,它将是Windows“ANSI”编码。 但是, System.console()会检测控制台的编码。

OEM代码页更可能支持U + 255A(╚),因为这些范围用于Windows中的重音字符。

您可以在这里 , 这里 , 这里和这里阅读更多内容。

就个人而言,我会避免使用代码页65001的-Dfile.encoding选项,因为这会在控制台(批处理文件停止工作)和Java( 错误 )中产生意外的副作用。

如果您使用的是Windows,则控制台不是UTF-8,而是UTF-16,它与Java使用的是相同的本机编码,因此您应该能够直接打印宽字符串。

我不是Java程序员,但在C的情况下你必须使用特殊模式_O_U16TEXT调用_setmode()才能打印UTF-16。

如果要打印多字节字符串,可以使用chcp 65001 SetConsoleOutputCP()将Windows控制台设置为UTF-8,或者从Win32 API SetConsoleOutputCP()编程方式将Windows控制台设置为UTF-8,但要注意WriteFile()返回写入的字符数而不是记录的字节数。 此错误导致Windows控制台上的UTF-8从Perl,PHP和Ruby中损坏。 我相信即使是MSVCRT也会成为受害者。

祝你好运!