Java字节流读取汉字乱码

关于Java字节流读取汉字乱码探究

  1. 问题概述
    当我们尝试使用字节流对汉字进行写入读取操作时,可能出现乱码。其根本原因在于编码标准不同。汉字采用gbk,而idea使用UTF-8。在这样的前提下,开始讨论本文题。

  2. 使用FileInputStream进行读取汉字

     首先在预先准备好 a.txt 文档,内部存储汉字,如图
    

Java字节流读取汉字乱码_第1张图片
可以看到其编码格式是ANSI,在中文windows上即为GBK编码。
Java字节流读取汉字乱码_第2张图片
在不改变编码格式的情况下,对该文件进行读取会产生乱码。我们可以使用byte数组,大小为2,进行对汉字的读取,刚好数组一次存储一个汉字的编码。然后输出到控制台,**由于Idea采用的UTF-8,所以在把数组转换为字符串时,需要加上编码方式。这一点决定成败!!!**代码如下:

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

        FileInputStream fis = new FileInputStream("D:\\a.txt");
        byte[] bytes = new byte[2];
        int len = 0;
        while ((len = fis.read(bytes))!=-1){
            System.out.println(new String(bytes,"gbk"));//关键就在此处,后面加上指定编码方式, 
            //因为读取的汉字时gbk编码,输出到控制台也要使用gbk,而本问题使用的是UTF-8
        }
        fis.close();
    }
}

结果如图,已经能够成功打印汉字。

Java字节流读取汉字乱码_第3张图片

  1. 结论

    总结可知,当编码方式相同时,还是能够使用字节流读取汉字的,但是局限性太大。本文所讨论内容,仅仅是学习过程中的疑惑分析,无食用价值。如有错误,谢谢指出(手动狗头)~~

你可能感兴趣的:(记录)