黑马程序员技术交流社区

标题: 为什么我打印控制台输入的汉字都是乱码? [打印本页]

作者: 李志敏    时间: 2013-4-15 23:32
标题: 为什么我打印控制台输入的汉字都是乱码?
eclipse 中java文件的属性是utf-8的时候打印控制台输入的汉字就是乱码 如果把文件的属性改成gbk就不乱码 这该怎么解决 如下测试程序 System.in后面加上编码格式也不行
        public static void main(String[] args) throws IOException {
                BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
                String line = null;
                while ((line = buf.readLine()) != null) {
                        System.out.println(line);
                }
                buf.close();
        }
作者: 史庆宇    时间: 2013-4-16 16:22
首先,InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。
System.out是PrintStream的一个实例,PrintStream 打印的所有字符都使用平台的默认字符编码转换为字节。而windows简体中文默认使用的是gbk编码。
如果自己new InputStreamReader(System.in,"utf-8")设定编解码的话,打印PrintStream打印的时候用的是bgk码表,所以输出问号。
如果new InputStreamReader(System.in,"gbk")和new InputStreamReader(System.in)效果是一样的。
另外windows的 中文版的内核编码是gbk的 英文版是utf8的。
我的是简体中文wins,以下为utf-8,运行结果出现不能解析。
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;

  4. public class lizi {
  5.         public static void main(String[] args) throws IOException {
  6.             BufferedReader buf = new BufferedReader(new InputStreamReader(System.in,"utf-8"));
  7.             String line = null;
  8.             while ((line = buf.readLine()) != null) {
  9.                     System.out.println(line);
  10.             }
  11.             buf.close();
  12.         }

  13. }
复制代码


================================
当为gbk时。
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;

  4. public class lizi {
  5.         public static void main(String[] args) throws IOException {
  6.             BufferedReader buf = new BufferedReader(new InputStreamReader(System.in,"gbk"));
  7.             String line = null;
  8.             while ((line = buf.readLine()) != null) {
  9.                     System.out.println(line);
  10.             }
  11.             buf.close();
  12.         }
  13. 运行结果为:
  14. }
复制代码

作者: 李志敏    时间: 2013-4-16 19:47
史庆宇 发表于 2013-4-16 16:22
首先,InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它 ...

请问你的 java文件是什么编码的 就是eclipse 右键这个类 properties  Text file encoding 设置的是 gbk还是 UTF-8 我设置成 UTF-8  就是System.in 后面加上 “UTF-8”  还是 “gbk” 都是乱码  只有java文件的属性设置成gbk时候才能达到你的结果
作者: 偏執旳、靑春    时间: 2013-4-17 11:07
首先,当我们创建一个Java文件时,可以对该文件的编码格式进行调整:选中要修改的Java项目,右键单击选择
properties—Resource:Text file encoding—other>"UTF-8 "点击Apply按钮- -OK按钮
或者菜单栏
Window—Preferences—General—Workspace:Text file encoding—other>"UTF-8 "
点击Apply按钮- -OK按钮
这样,再纠正代码中的乱码。在我们编写Java文件时,输入的中文就不会是乱码了但是输出到控制台的时候还是会有乱码。
只找到一点,那把我的方法描述如下:
对于输出到控制台的乱码,上述方法则不能解决。在回复我。
作者: 黄玉昆    时间: 2013-4-18 20:19
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2