为什么 IDEA 显示结果为乱码而命令行窗口不会?

为什么 IDEA 显示结果为乱码而命令行窗口不会?,第1张

为什么 IDEA 显示结果为乱码而命令行窗口不会?,第2张

最近在学习如何在 Java 程序中调用系统中的命令,程序如下: public static void main(String[] args) { String cmd="ipconfig"; Runtime run=Runtime.getRuntime(); try { Process process=run.exec(cmd); InputStream in=process.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); String s = null; while ((s = reader.readLine()) != null) { System.out.println(s); } in.close(); process.waitFor(); }catch (IOException e){ e.printStackTrace(); }catch (InterruptedException e){ e.printStackTrace(); }

}

在 IDEA 中直接运行的时候,汉字部分显示为乱码,但在命令行中运行该程序却能正确显示汉字。 应该是两个环境的字符编码不同导致,该如何修改才能让 IDEA 能够正确显示汉字?

----------------------- 以下是精选回复-----------------------

答:BufferedReader reader = new BufferedReader(new InputStreamReader(in, "GBK"));

指定编码
答:在 Stream 转 reader 的时候需要指定编码, 如果不指定, 那么就会使用一个 JVM 默认的编码, 判断逻辑在:


public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
String csn = AccessController.doPrivileged(
new GetPropertyAction("file.encoding"));
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");
}
}
return defaultCharset;
}


如果在 windows 下不指定编码, 那么最后你解码出来的 reader 就是使用 utf-8 解码的, 但是 windows 输出的流是 GBK 编码, 编码和解码的方式不同就会导致乱码

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 为什么 IDEA 显示结果为乱码而命令行窗口不会?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情