Rumah  >  Soal Jawab  >  teks badan

java - 是什么导致了Eclipse控制台中文乱码

今天写了一个通过控制台和程序交互的程序(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之间还有什么环节么?这个是我想问的

怪我咯怪我咯2764 hari yang lalu278

membalas semua(0)saya akan balas

Tiada jawapan
  • Batalbalas