java io 乱码_java的IO流乱码问题

以下Demo.java文件,在eclipse里面,文件的属性为UTF-8。---------------------------------------------------------------------------------------------------------------import...

以下Demo.java文件,在eclipse里面,文件的属性为UTF-8。

---------------------------------------------------------------------------------------------------------------

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.nio.charset.Charset;

public class Demo

{

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

{

System.err.println("Java虚拟机的默认 charset:"+Charset.defaultCharset());

InputStreamReader inputStreamReader = new InputStreamReader(System.in);

System.err.println("此流使用的字符码表名称:"+inputStreamReader.getEncoding());

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String str = null;

while((str = bufferedReader.readLine())!= null)

{

System.err.println(str);

}

}

}

-----------------------------------------------------------------------------------------------------------------------

程序的功能是在控制台里面输入文字并且显示出来。当以上程序放到eclipse里面运行,然后在控制里面输入文字啊啊啊啊“之后,显示的结果会是乱码,到底是什么原因我至今未能搞明白,而且所有的码表我用的都是UTF-8,都是正确对应的,为啥会出现乱码,求高手告知。程序的运行结果如下所示。

这个程序的含金量还是很高的,解决乱码问题不难,难就难在知道他出现乱码的原理。

我告诉你,你在while循环里面的输出语句前加上这行代码:str = new String(str.getBytes("GBK"),"UTF-8");

你会发现,乱码解决了。根据这行代码的解释,可以从这行代码中知道,之所以用显示乱码的原因是,字符串 在输出的时候使用了GBK“解码”,需要把GBK“编码”回原始状态,再用UTF“解码”即可解决乱码问题。

那么问题来了。前面的的java虚拟机默认charset是UTF-8,此流使用的字符码表也要使用UTF-8,也就是字节流通向字符流的“解码”过程也是用UTF-8。那么从头到位用的都是UTF-8,为什么偏偏输出的时候会出现GBK呢???求解释。。要深入理解这个程序,得对编码解码有很深的理解才行,这个也是我困惑的地方!!

展开

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值