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编码的中文是三个字节的。 这两点之间是不是有什么关系呢?
在类上右击,选properties,在谈粗的对话框中最下面有个Text File encoding,设置为gbk或gb2312,就行了!
/**
* @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 让他读取中文不乱码
我现在就想按照UTF-8的情况来进行,一套都是UTF-8的。
后来我又试了一下,如果输入 “小宇宙”,会显示“小宇�?”,如果输入“小宇宙小宇宙”,就可以正常显示。我想是跟Scanner有关的,好像只有输入的内容的字节数是偶数的,所有内容才可以正常显示。否则如果是奇数n的话,前n-1个字节会正常显示的,后边的会乱码。
不清楚Scanner解析字节的方式。
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编码字符,所以打印乱码了。
求解啊!!好几天了,谢谢!!!
宇宙
yuzhou宇宙
有意思,好好看哈...
虽然最后输入的是 宇 字,但之前已经在里边输入了yu这两个字符,所以会打印出来,如上图。你难道不乱码吗?.java文件是utf-8的吗?console设置的编码是多少啊?
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,或者什么的,所以就会出问题