我无法理解 System.in.read() 方法是如何工作的。有这么一段代码: public static void main(String[] args) throws IOException { while (true){ Integer x = System.in.read(); System.out.println(Integer.toString(x, 2)); }我知道 System.in.read() 方法从输入流中读取每个字节。所以当我输入'A'(U+0041,一个字节用于存储字符)时 - 程序输出是: 1000001 (U+0041) 1010 (NL) - it works as expected.但是当我输入“Я”(U+042F,两个字节用于存储字符)时 - 输出是: 11010000 (byte1) 10101111 (byte2) 1010 (byte3 - NL)字母“Я”(U+042F) 的真实代码是 10000101111。为什么 11010000 10101111 (byte1 + byte2) 不是字母 'Я'(U+042F) 的二进制代码?
1 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
这将取决于向 发送数据的外部进程System.in
。它可以是命令 shell、IDE 或其他进程。
在命令 shell 的典型情况下,shell 将配置字符编码。(chcp
在 Windows 上、locale charmap
在 Linux 上。)
字符编码确定图形字符或字形如何编码为数字。例如,Windows 计算机可能使用“Windows-1251”的“代码页”并将“Я”编码为一个字节 (0xCF)。或者,它可以使用 UTF-8 并将“Я”编码为两个字节 (0xD0 0xAF),或使用 UTF-16 并使用两个不同的字节 (0x04 0x2F)。
您的结果表明,向 Java 程序发送数据的进程正在使用 UTF-8 作为编码。
添加回答
举报
0/150
提交
取消