Java IO流使用乱码问题总结

  • IO流使用过程中出现乱码问题
    • 乱码发生的根因
    • 常见io流中文乱码场景及解决方法
      • FileInputStream 和 FileWriter 读取文件时中文乱码问题
      • 序列化与反序列化时中文乱码问题

IO流使用过程中出现乱码问题

初学者在学习IO这一章节时候经常可能会碰到读取文件中文乱码的问题。这个东西比较简单,大佬们都懒得写,索性我就简单的说下这个事情,希望能为一些人解惑。


乱码发生的根因

发生中文乱码的原因是 文件存储数据的编码方式 跟 读取文件数据时解码方式方式不同

比如常见的中文乱码问题,原因总结归类就两种:

  • 一种是 数据按照GBK编码存储在文件中,以UTF-8编码去读取导致中文乱码。
  • 另一种是 数据存储是UTF-8编码,解码使用GBK导致乱码。

中文乱码根因
GBK编码中用2个字节表示一个中文字符,UTF-8编码中使用3个字节表示一个中文字符。系统中数据都是以字节的形式存储在文件中,文件的大小也是按字节算。假如一个文件有6个字节,GBK编码就是3个中文字符,UTF-8编码则是2个中文字符。所以只要编码解码的方式不一致,就会出现中文乱码问题。


一般集成开发环境 如IDEA 和 Eclipse都是默认使用UTF-8编码。

我们一开始学习IO流的时候主要就是对磁盘文件做io操作,读写数据。读写过程中如果碰到读写的编码不一致就很容易出现中文乱码情况。相信很多初学者对此烦恼过,下面就总结一下使用IO流时常见的中文乱码情况。


常见io流中文乱码场景及解决方法

FileInputStream 和 FileWriter 读取文件时中文乱码问题

可能原因:

  1. 读取本地磁盘中的文件是GBK编码,而读取的方式是UTF-8。
  2. 文件是UTF-8编码,但是读取文件的类java文件是GBK方式,也会导致乱码。

解决方法:

  1. 使用InputStreamReader 中带编码方式参数的构造器创建对象读取文件数据 (InputStreamReader的使用可以查看api文档或者百度案例)
  2. 修改文件为UTF-8编码格式,文件另存为。。可以选择编码方式,或者Notepad++中也可改变文件编码方式。
  3. 检查所有java文件编码方式,都调成UTF-8。

序列化与反序列化时中文乱码问题

可能原因: 序列化对象的类 跟 反序列化对象的类编码方式不同,看IDEA右下角类的编码方式。虽然IDEA默认是UTF-8,但有些同学不小心修改了几个java文件编码方式为GBK了,导致序列化类和反序列化类编码方式不同,就会出现中文乱码的情况。

解决方法: 将序列化类编码方式和反序列类的编码方式都调成UTF-8。

Java IO流使用过程中乱码问题总结相关推荐

  1. java io流区别_Java中IO流的分类和BIO,NIO,AIO的区别

    到底什么是IO 我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢? 拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目 ...

  2. java io流顶层_Java中的IO流(一)

    一,IO流的分类 A,按照操作的对象不同可分为字节流与字符流 B,按照流的方向不同可分为输入(指从外部存储设备拿文件到内存)流也叫读与输出(指从内存把文件写入到外部存储设备)流也叫写 注:字节流可以操 ...

  3. Java读取文件流用什么对象_使用Java IO流实现对文本文件的读写过程中,通常需要处理下列( )异常。_学小易找答案...

    [论述题]请根据第一次平时作业的选题,结合第二次课内容,自拟一个论文提纲. [单选题]在 switch ( expression )语句中, expression 的数据类型不能是 ( ) [单选题] ...

  4. [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别

    [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...

  5. Java IO流大闯关--IO流的常用实现类

    这个系列的博客主要是对Java高级编程中IO流相关的知识点做一个梳理,内容主要包括File类.IO流原理及流的分类.文件流.缓冲流.转换流.标准输入输出流.打印流.数据流.对象流.随机存取文件流.NI ...

  6. Java IO流学习总结六:ByteArrayInputStream、ByteArrayOutputStream

    Java IO流学习总结六:ByteArrayInputStream.ByteArrayOutputStream 转载请标明出处:http://blog.csdn.net/zhaoyanjun6/ar ...

  7. java io流 教程_Java基础教程:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:指的是从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列 ...

  8. Java IO: 流

    转载自  Java IO: 流 原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) Java IO流是既可以从中读取,也可以写入到其中的数据流. ...

  9. Java基础17:Java IO流总结

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a724888/article/details/80201802 这位大侠,这是我的公众号:程序员江湖 ...

  10. Java IO流简介

    Java中的流是什么? java中的流是一个抽象的概念,在java的程序中需要把文件从一个设备传输到另一个设备上,这个设备可以是内存,程序,文件,网络.把在这些之间传输的叫做流.官方的解释:流是一组有 ...

最新文章

  1. python encoder_python JSONencoder
  2. 微信公众平台 图片 java_Java微信公众平台之素材管理
  3. 春节抽空读了8本书,只有这本书我1字不落的读完了!(上)
  4. class action extends mysql{_java Action 请求封装(二)
  5. vue报错 Uncaught (in promise) NavigationDuplicated {_name:““NavigationDuplicated“... 的解决方法
  6. feedback vertex set problem (FVS) 反馈顶点集问题 是什么
  7. risksystem_环境风险评价系统(RiskSystem)
  8. selenium安装和下载
  9. csSEnet注意力网络
  10. Py函数直接传入root是啥意思_阿里云python课程笔记(四):函数amp;类和对象
  11. keras教程_Keras教程
  12. 充分利用居室空间 让阳台尽显万种风情
  13. python爬虫获取服务器信息,通过python自动化获取服务器信息,并写入到excel(示例代码)...
  14. 一间计算机教室用英语怎么说,一间电脑室是什么意思
  15. Facebook要来东区挖人了,微软准备好了吗?
  16. qemu 信号线程化
  17. 微信小程序使用video播放视频失败
  18. 用python-OpenCV做一个魔方墙找茬程序(3D视眼训练) 版本2.0:加入倒计时功能
  19. 高房楼噪音测试软件,高层住宅噪音测试:11层分贝数高于其他楼层
  20. 2023年十大热门婚恋交友软件,真实靠谱相亲app排行榜

热门文章

  1. Axure 9 实战案例,母版的应用 3,用母版绘制高逼格APP原型
  2. redis java 视频教程_Redis基础与提升视频教程
  3. 《Redis视频教程》(p2)
  4. pr用什么显卡比较好_学ps pr ae用什么电脑比较好?有什么配置要求?
  5. ENVI提取植被指数(NDVI)的两种方法
  6. ICLR 2022 | 合作博弈新范式:为可解释性等机器学习估值问题提供新方法
  7. ProE/Creo免费插件 MCADEx Tools 5.0
  8. 20170814二维码的识别
  9. App测试流程及测试点
  10. ExtJs6 为Ext.Img对象添加单机事件