A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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();
        }

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
首先,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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
史庆宇 发表于 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时候才能达到你的结果
回复 使用道具 举报
首先,当我们创建一个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文件时,输入的中文就不会是乱码了但是输出到控制台的时候还是会有乱码。
只找到一点,那把我的方法描述如下:
对于输出到控制台的乱码,上述方法则不能解决。在回复我。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马