黑马程序员技术交流社区

标题: 使用转换流接收键盘录入并打印的问题 [打印本页]

作者: 雨的印记yp    时间: 2014-1-9 15:20
标题: 使用转换流接收键盘录入并打印的问题
使用BufferedReader和InputStreamReader接收键盘录入并打印,如果录入全是英文没有问题,但是录入中文就会出现问题,为什么?
程序
  1. public class KeyIn2 {

  2.         public static void main(String[] args) throws IOException {

  3.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  4.                
  5.                 String line = null;
  6.                 while((line = bufr.readLine()) != null){
  7.                         if("over".equals(line))
  8.                                 break;
  9.                         System.out.println(line);
  10.                 }
  11.                
  12.                 bufr.close();
  13.         }

  14. }
复制代码

运行

1.PNG (2.03 KB, 下载次数: 66)

英文没问题

英文没问题

2.PNG (2.46 KB, 下载次数: 49)

中文出现问题

中文出现问题

作者: 渐渐不懂了    时间: 2014-1-9 15:42
本帖最后由 渐渐不懂了 于 2014-1-9 15:43 编辑

Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
在转换过程中会出现类型提升所以为错误吧;我也不是和理解你在请教请教大师吧

作者: 75100313    时间: 2014-1-9 15:50
我觉得是你输入汉字的时候光标没有在新的行  而是在 上一次打印结果的前面直接输入汉字 造成的问题
慢点输  注意光标的位置
作者: 75100313    时间: 2014-1-9 15:51
渐渐不懂了 发表于 2014-1-9 15:42
Reader 用于读入16位字符,也就是Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。
...

InputStreamReader 是字节流通向字符流的桥梁!
作者: 渐渐不懂了    时间: 2014-1-9 15:53
75100313 发表于 2014-1-9 15:51
InputStreamReader 是字节流通向字符流的桥梁!

哦,那就不晓得了
作者: 雨的印记yp    时间: 2014-1-10 15:42
这个程序在eclipse运行时会发生问题,我用dos命令行试了试,结果发现中文英文都正常。这是eclipse的问题。具体就不清楚了。
作者: 山治0712    时间: 2014-1-14 23:18
System.out是打印字节的流,而你将System.in转成了字符流
作者: 雨的印记yp    时间: 2014-1-15 14:42
山治0712 发表于 2014-1-14 23:18
System.out是打印字节的流,而你将System.in转成了字符流

但是在dos运行完全没有问题。
即使我把输出流也包装一下,在eclipse依然打印有问题、
  1. public class KeyIn2 {

  2.         public static void main(String[] args) throws IOException {

  3.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  4.                 PrintWriter pw = new PrintWriter(System.out, true);
  5.                
  6.                 String line = null;
  7.                 while((line = bufr.readLine()) != null){
  8.                         if("over".equals(line))
  9.                                 break;
  10.                         pw.println(line);
  11.                 }
  12.                
  13.                 bufr.close();
  14.         }

  15. }
复制代码




作者: 山治0712    时间: 2014-1-15 23:51
雨的印记yp 发表于 2014-1-15 14:42
但是在dos运行完全没有问题。
即使我把输出流也包装一下,在eclipse依然打印有问题、

我也试了下,在dos下确实没出现问题




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