其实这问题和eclipse没有关系,这和操作系统的语言环境有关.如果你的操作系统的语言环境不是中文(中国),那么你想输入或输出中文,就必须要在在实例化输入流或输出流对象时,要传入"gbk"的编码,这样才可以读取到中文字符.由于你的操作系统的语言环境不是中文(中国),比如说如果是英语(美国),那么就要将输入流取得的中文字符先用某一种编码格式(比如说utf-8)编码为英语(美国)语言环境可以接受的字节,再将编码后的字节以同一种编码格式(utf-8)解码为英语(美国)语言环境可以接受的字符,这样就可以在控制台中打印出来了,以下是代码示例:- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStreamWriter;
- import java.io.Reader;
- import java.io.UnsupportedEncodingException;
- public class KeyTest {
- public static void main(String[] args) throws IOException {
- BufferedReader isr = new BufferedReader(new InputStreamReader(
- System.in, "gbk"));
- BufferedWriter ow = new BufferedWriter(new OutputStreamWriter(
- System.out, "gbk"));
- while (true) {
- String s = lineRead(isr);
- if (s.equals("over")) {
- break;
- }
- ow.write(s);
- ow.flush();
- s = null;
- }
- ow.close();
- isr.close();
- }
- public static String lineRead(Reader is)// 读取控制台的一行文字
- {
- StringBuilder sb = new StringBuilder();
- int i = 0;
- String string = null;
- while (true) {
- try {
- // \r和\n不论是单独出现还是一起出现都放到容器中,
- // 当两个同时出现代表换行符,一次输入结束
- i = is.read();
- if (i == '\r') {
- break;
- } else if (i == '\n') {
- break;
- } else {
- sb.append((char) i);
- }
- } catch (IOException io) {
- io.printStackTrace();
- System.out.println("读取失败");
- }
- }
- try {
- // 必须要将把从gbk语言环境中取得的中文字符先编码为utf-8格式的字节,再将此编码后的
- // 字节解码为utf-8格式的字符,才可以在各种不同语言环境的操作系统上正确显示出中文字符,
- // 因为utf-8是全球通用的编码格式,包括了所有国家使用的语言文字.
- string = new String(sb.toString().getBytes("utf-8"), "utf-8");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return string;
- }
- }
复制代码 |