java的IO流乱码问题

以下Demo.java文件,在eclipse里面,文件的属性为UTF-8。------------------------------------------------... 以下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呢???求解释。。要深入理解这个程序,得对编码解码有很深的理解才行,这个也是我困惑的地方!!
展开
 我来答
Java开发乐园
2015-06-21 · 超过26用户采纳过TA的回答
知道答主
回答量:118
采纳率:0%
帮助的人:46.5万
展开全部

你将eclipse的编码集也改成UTF-8试试

更多追问追答
追问
改了也不行。你跑一下我这份代码就知道了,确实不知道是在哪个地方出现了问题
追答

我这边没问题

开心的马六
2015-07-02 · TA获得超过473个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:200万
展开全部
Run Configurations->Common->Encoding这里的编码改为utf-8试试。如果还不行,那就在eclipse.ini里加一句-Dfile.encoding=UTF-8,重启eclipse再试试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式