我無(wú)法理解 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() 方法從輸入流中讀取每個(gè)字節(jié)。所以當(dāng)我輸入'A'(U+0041,一個(gè)字節(jié)用于存儲(chǔ)字符)時(shí) - 程序輸出是: 1000001 (U+0041) 1010 (NL) - it works as expected.但是當(dāng)我輸入“Я”(U+042F,兩個(gè)字節(jié)用于存儲(chǔ)字符)時(shí) - 輸出是: 11010000 (byte1) 10101111 (byte2) 1010 (byte3 - NL)字母“Я”(U+042F) 的真實(shí)代碼是 10000101111。為什么 11010000 10101111 (byte1 + byte2) 不是字母 'Я'(U+042F) 的二進(jìn)制代碼?
1 回答

慕村9548890
TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊
這將取決于向 發(fā)送數(shù)據(jù)的外部進(jìn)程System.in
。它可以是命令 shell、IDE 或其他進(jìn)程。
在命令 shell 的典型情況下,shell 將配置字符編碼。(chcp
在 Windows 上、locale charmap
在 Linux 上。)
字符編碼確定圖形字符或字形如何編碼為數(shù)字。例如,Windows 計(jì)算機(jī)可能使用“Windows-1251”的“代碼頁(yè)”并將“Я”編碼為一個(gè)字節(jié) (0xCF)。或者,它可以使用 UTF-8 并將“Я”編碼為兩個(gè)字節(jié) (0xD0 0xAF),或使用 UTF-16 并使用兩個(gè)不同的字節(jié) (0x04 0x2F)。
您的結(jié)果表明,向 Java 程序發(fā)送數(shù)據(jù)的進(jìn)程正在使用 UTF-8 作為編碼。
添加回答
舉報(bào)
0/150
提交
取消