首先,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,运行结果出现不能解析。- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class lizi {
- public static void main(String[] args) throws IOException {
- BufferedReader buf = new BufferedReader(new InputStreamReader(System.in,"utf-8"));
- String line = null;
- while ((line = buf.readLine()) != null) {
- System.out.println(line);
- }
- buf.close();
- }
- }
复制代码
================================
当为gbk时。- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class lizi {
- public static void main(String[] args) throws IOException {
- BufferedReader buf = new BufferedReader(new InputStreamReader(System.in,"gbk"));
- String line = null;
- while ((line = buf.readLine()) != null) {
- System.out.println(line);
- }
- buf.close();
- }
- 运行结果为:
- }
复制代码 |