解决字节流和字符流的乱码问题(转换流)

乱码的根本原因

编码和解码的规则不同

例如:IDEA默认读取文件,编码格式为UTF-8,windows系统文件默认储存格式为GBK,当IDEA读取windows下的文件时,如果不做特殊处理,就可能会出现乱码。

转换流

  • InputStreamReader
  • OutputStreamWriter

读取文件

可以使用转换流InputStreamReader来解决乱码问题
IDEA默认编码为UTF-8,读取GBK文件
在这里插入图片描述
使用转换流设置读取编码为GBK
InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");

@Test
public void Test3() throws IOException {

	  InputStreamReader isr = new InputStreamReader(new FileInputStream("a.txt"),"GBK");
	   int read;
	   while((read=isr.read())!=-1){
	       System.out.println((char) read);
	       System.out.println(read);
	   }
	   isr.close();
}

输出结果:
你好
abc
哈哈哈

写入文件

@Test
public void Test6() throws IOException {

    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("b.txt"),"GBK");
    osw.write("你好");
    osw.write("\r\n");
    osw.write("abc");
    osw.write("\r\n");
    osw.flush();
    osw.write("哈哈哈");
    osw.close();
}

结果:编码格式为GBK


在这里插入图片描述



InputStreamReader类

转换流java.io.InputStreamReader,是Reader的子类,是从字节流到字符流的桥梁。它读取字节,并使用指定的字符集将其解码为字符。它的字符集可以由名称指定,也可以接受平台的默认字符集。

构造方法

  • InputStreamReader(InputStream in): 创建一个使用默认字符集的字符流。
  • InputStreamReader(InputStream in, String charsetName): 创建一个指定字符集的字符流。

OutputStreamWriter类

转换流java.io.OutputStreamWriter ,是Writer的子类,是从字符流到字节流的桥梁。使用指定的字符集将字符编码为字节。它的字符集可以由名称指定,也可以接受平台的默认字符集。

构造方法

  • OutputStreamWriter(OutputStream in): 创建一个使用默认字符集的字符流。
  • OutputStreamWriter(OutputStream in, String charsetName): 创建一个指定字符集的字符流。
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RwTo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值