今天写了一个通过控制台和程序交互的程序(eclipse控制台编码格式为utf-8).理想化打印内容和输入内容是一样的.实际上出现了乱码.
在百度上找到了解决方法,在eclipse.in配置-Dfile.encoding=utf-8就可以了.问题解决了,但还是想分析下原因,
猜想结果如下图:
public void test() throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));
String indexDir = SearcherTest.class.getResource("/document").getPath();
System.out.println("IndexDir: " + indexDir);
while(true){
System.out.println("Enter queryString: ");
String queryString = reader.readLine(); //这里"月回到"已经变为"鏈堝洖鍒�" 15个字节
System.out.println(queryString.getBytes().length);
// printHexString(queryString.getBytes("UTF-8"));
System.out.println(queryString);
if("-Dquit".equals(queryString)){
break;
}
Searcher.search(indexDir, queryString);
}
System.out.println("Bye");
}
控制台内容:
Enter queryString:
月回到
字符串字节长度: 15
QueryString: 鏈堝洖鍒�
简单来讲就是jvm在某个环节将 输入内容用GBK编码后导致最后输出内容乱码.
但现在搞不明白是哪个环节发生了GBK编码.从代码中可以看出在readline之后就已经乱码.在控制台传送输入内容到system.in readLine之间还有什么环节么?这个是我想问的