问题:
在英语Windows 10上使用斯洛文尼亚键盘布局时,所有命令行界面似乎都存在显示(打印)UTF-8字符的问题,即č、š和ž这些字符被替换为?(我假设所有UTF-8特定字符也不起作用,因为ć和đ也不起作用。)
测试环境:
- Windows 10 64位英语 - 斯洛文尼亚键盘布局下的CMD、Powershell、Cmder...无法成功
- Windows 10 64位英语 - 斯洛文尼亚键盘布局下的Intellij IDEA...成功 -> 在IDE中按照需要工作,但在CLI中不起作用。
- Windows 10 64位英语 - 英语键盘下的CMD...成功
- Windows 10 64位斯洛文尼亚语 - 斯洛文尼亚键盘布局下的CMD...成功
- 几个Linux发行版(Ubuntu、Mint、Kali)...成功
已尝试:
- 将chcp更改为chcp 65001...无法成功
- 在regedit中创建Autorun文件以强制使用UTF-8...无法成功
- 不同的Java编译器...无法成功
示例代码:
public class Test2 {
public static void main(String[] args) {
System.out.println("č š ž ć đ");
}
}
CMD:
>javac -encoding UTF-8 test2.java
>java Test2
? ? ? ? ?
其他注意事项:
该问题出现在多台运行不同硬件的计算机上。在所有上述提到的命令行界面中,所有上述提到的字符默认情况下都可以正常工作。因此,问题似乎只在Java中出现。
WriteConsoleW
进行写入。传统程序使用WriteFile
或WriteConsoleA
写入多字节字符串。在这种情况下,控制台使用其输出代码页(GetConsoleOutputCP
和SetConsoleOutputCP
)来解码字符串。UTF-8作为代码页65001被支持,但根据Windows版本的不同,它极其容易出现错误。对于多字节输入(ReadFile
、ReadConsoleA
),包括Windows 10在内的所有版本都更糟糕,因为它无法读取除7位ASCII以外的任何内容。 - Eryk Sun