我一直有个疑问:我在myeclipse这种IDE中的控制台输入的字符是什么编码的?
跟什么因素有关系?IDE设置?操作系统?
还有,system.in是个InputStream,用它读不出String,是不是得加个InputStreamReader?
我自己写了个程序,想看看编码,但是程序的输出我自己也没看明白。。也许是我写的有问题,请高人指教
谢谢~~
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class In {
public static void main(String[] args) throws IOException { //用你这个字做实验,我想看看在各种编码下,二进制都是什么样子
String s = "你";
PrintBytes(s.getBytes("GBK"));
PrintBytes(s.getBytes("UTF-8"));
PrintBytes(s.getBytes("GB2312")); while (true) {
PrintOneByte((byte) System.in.read());
} } //以二进制形式输出一个byte数组
static void PrintBytes(byte[] bytes) { for (int i = 0; i <= bytes.length - 1; i++) {
//调下面那个函数。。
PrintOneByte(bytes[i]);
}
System.out.println();
}

//以二进制形式输出一个byte
static void PrintOneByte(byte oneByte) { int shadow = 1; int temp = (int) oneByte;
for (int p = 7; p >= 0; p--) {
if ((temp & (shadow << p)) != 0)
System.out.print(1);
else
System.out.print(0);
}
System.out.print(" ");
}
}下面是程序的输出:
11000100 11100011  //GBK
11100100 10111101 10100000  //UTF-8
11000100 11100011  //GB2312
你    //我在控制台输入中文“你”,下面是结果,和上面三种编码没有一个相同的。。
11100110 10110101 10100011 11101111 10111111 10111101 00001010 
00001101 00001010 //这个事直接按回车生成的CR和LF 我查了ASCII。

解决方案 »

  1.   

    不好意思,楼主,我命令行模式下输出的结果是:D:\develop\workspace\0_tmp_test\bin>java 测试IN -cp .
    11000100 11100011
    11100100 10111101 10100000
    11000100 11100011

    11000100 11100011 00001101 00001010对了,我操作系统是Win7中文的。另外GB2312字符集可以理解为GBK字符集的子集。
      

  2.   

    Java汉字内部处理是Unicode,2位定长,这就是为啥处理字符串的时候,一个汉字占用2个byte。但是Java在做存储的时候,用的是UTF-8,这个是变长的,不过汉字都是3个byte,也就是你打印出来的效果。另外你可以检查下你环境的字符集:
    String encoding = System.getProperty("file.encoding");
    System.out.println(encoding);
    关于字符集的,我知道alexandertech(艾瑞克.泰)比较精通,问问他吧。
      

  3.   

    我也是win7中文版 怪怪怪。。
      

  4.   

    我的显示UTF-8.一直不明白file.encoding的作用,自己胡乱改过。。
      

  5.   

    貌似这个file.encoding是IDE对操作系统编码的假设。。
      

  6.   

    把你的Java文件的保存字符集,修改为GBK,再跑跑程序看有没有差异?
      

  7.   

    我用cmd湿了一下 显示正常,吧IDE的设置改回来也正常了。接分!