Java字节流读取汉字乱码

本文探讨了使用Java字节流读取GBK编码的汉字时出现乱码的问题,并提供了解决方案。通过指定正确的编码格式,可以避免乱码现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

  2. 使用FileInputStream进行读取汉字

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

在这里插入图片描述
可以看到其编码格式是ANSI,在中文windows上即为GBK编码。
在这里插入图片描述
在不改变编码格式的情况下,对该文件进行读取会产生乱码。我们可以使用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();
    }
}

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

在这里插入图片描述

  1. 结论

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

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值