eclipse的控制台在UTF-8编码下键盘输入BUG问题,请问有谁能解决

最近我在eclipse下测试中文字符的输入输出问题,发现eclipse下控制台的编码设置为utf-8时,当从eclipse控制台录入汉字后,会出现乱码问题。

虽然这个问题看起来在实践中用量不大,但是对于理解字符编码有作用的。

 

场景如下:

eclipse控制台编码设置为utf-8,设置位置如图:

 

 

 再来设置file.encoding的编码,目的是为了设置java程序的默认编码。

 

 

 测试程序如下:

 

public class CharsetCodingOutTest {
	
	public static void main(String[] args) throws IOException{
		System.out.println("平台使用默认编码:"+System.getProperty("file.encoding"));
		System.out.println(Charset.defaultCharset());
		/**
		 * 文件输入流,只要按照正确编码读取,就没有问题。
		  这么做的目的是为了测试后面的程序是否正确。真正需要做的是用键盘输入流代替文件输入流

		 */
		//InputStream is=new FileInputStream("d:\\test\\test_utf8.txt");
		/**
		 * 键盘输入流
		 */
		InputStream is=System.in;
		/**
		 * 下面的编码如果没有设置对的话,就会出现解码错误,以后就可能不能恢复了。
		 * 
		 * 一般用ISO8859-1 和gbk来解码其它的字符编码,错误了,还可以恢复。
		 * 但是如果用utf-8 来解码utf-8或者用gb2312解码utf-8的字符编码,错误了,就不能恢复了。
		 * 
		 * 总之用错编码解码时,只要能解码对应到任何一个存在的字符时,就可以恢复。
		 * 如果解码时,映射不到一个字符时,就会用?代替,这样就恢复不了啊。
		 */
		InputStreamReader isr=new InputStreamReader(is,"UTF-8");//,"UTF-8"
		
		BufferedReader br = new BufferedReader(isr); 
		String s = br.readLine();
		br.close();
		//目前控制台编码是UTF-8,程序默认输出也是UTF-8,所以下面的输出应该是没有问题。除非读取的s字符串在InputStreamReader中解码错误了。
		System.out.println(s);
		//System.out.write(s.getBytes("GBK"));
		//System.out.println();
		//目前控制台编码是UTF-8,指定以UTF-8码输出到控制台,所以下面的输出应该是没有问题。除非读取的s字符串在InputStreamReader中解码错误了。
		System.out.write(s.getBytes("UTF-8"));
	}

}

 如果是从一个utf-8的文件中读取汉字,然后输出到eclipse控制台,这个程序是没有问题的,可以正确输出汉字。

可是从eclipse的控制台下读取汉字,就会出现乱码。

 

所以键盘输入流的解码错误了,那么应该用什么编码进行解码读取呢。

 

我的思路是:

1、首先对键盘输入流读取的汉字进行解码,

2、然后jvm虚拟机会进行转换成unicode码加载到内存中,

3、jvm把unicoe转换成程序指定的编码,然后输出到控制台

4、控制台再用指定的编码进行显示。

 

 

请哪位高手指点迷津,帮我解决。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值