public class InputTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String name = in.next();
System.out.println(name);
}
}上边的程序,执行后,如下图:会出现乱码。
如果在cmd中执行则不会乱码。如图:

InputTest.java文件是utf-8编码的。
但是假如我输入 宇宙  就可以正常显示,如图:
不清楚是什么原因。
我想的是:System.in是字节流吧?  UTF-8编码的中文是三个字节的。 这两点之间是不是有什么关系呢?

解决方案 »

  1.   

    如果是utf-8编码,那么system.in的中文会出现乱码
      

  2.   

    楼主用的是eclipse吧!下面的方法可以一试:
    在类上右击,选properties,在谈粗的对话框中最下面有个Text File encoding,设置为gbk或gb2312,就行了!
      

  3.   

    public class Main {
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in, "GB2312");
            String name = in.next();
            System.out.println(name);    }}可以在后面加个Chaeset 让他读取中文不乱码
      

  4.   

    按照您说的,以下是执行后的截图:
    我现在就想按照UTF-8的情况来进行,一套都是UTF-8的。
    后来我又试了一下,如果输入 “小宇宙”,会显示“小宇�?”,如果输入“小宇宙小宇宙”,就可以正常显示。我想是跟Scanner有关的,好像只有输入的内容的字节数是偶数的,所有内容才可以正常显示。否则如果是奇数n的话,前n-1个字节会正常显示的,后边的会乱码。
    不清楚Scanner解析字节的方式。
      

  5.   

    再补充一下:
    String name = in.next();得到name后,我在打印System.out.println(name.getBytes());
    当输入“宙”,打印:-17;-65;-67;63; (我将byte数组中的内容用;分割打印的),name不能正常在控制台打印出来。
    当输入“宙宙”,打印:-27;-82;-103;-27;-82;-103;可以正常在控制台打印出来。
    utf-8编码,“宙”这个字符串执行getBytes()方法,返回的就是-27;-82;-103;数组。不清楚为什么当我输入“宙”,会打印:-17;-65;-67;63;。由于该字节数组没有对应的UTF-8编码字符,所以打印乱码了。
    求解啊!!好几天了,谢谢!!!
      

  6.   

    在我的电脑里面出现的是这样的结果呢
    宇宙
    yuzhou宇宙
    有意思,好好看哈...
      

  7.   

    哥,您是不是用的sougou的输入法啊。yuzhou的拼音是你先输入进去的。你输入单个字“宇”,有问题吗?
      

  8.   

    恩,我用的sougou,输入宇的话就是前面多个yu而已...输入法和这个有关系啊?
      

  9.   

    我换成Google输入法发现出现的是两个汉字了....
      

  10.   


    虽然最后输入的是 宇 字,但之前已经在里边输入了yu这两个字符,所以会打印出来,如上图。你难道不乱码吗?.java文件是utf-8的吗?console设置的编码是多少啊?
      

  11.   

    因为系统默认的是GBK编码,你输入的是UTF-8,肯定会是乱码了。
      

  12.   

    在windows下文件编码用utf-8,那样用scanner就会乱码,改成gbk就好了
      

  13.   

      public static void main(String[] args) {
            int i = 10;
            while (i-- > 0) {
                Scanner in = new Scanner(System.in, "GBK");
                String name = in.next();
                System.out.println(name);
            }
        }由于本机Locale是GBK,也就是cp936 (windows xp),所以如果不带参数的话,Scanner(System.in),它把in当成GBK,而你用了集成的ide,这个输入的字符集编码可能就是utf-8,或者什么的,所以就会出问题 
      

  14.   

    UTF-8的一个BUG,对于奇数个汉字显示有问题
      

  15.   

    "UTF-8的一个BUG,对于奇数个汉字显示有问题",这个说法不正确吧