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呢???求解释。。要深入理解这个程序,得对编码解码有很深的理解才行,这个也是我困惑的地方!! 展开
---------------------------------------------------------------------------------------------------------------
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呢???求解释。。要深入理解这个程序,得对编码解码有很深的理解才行,这个也是我困惑的地方!! 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询