关于IO流乱码,为什么会乱码?
我们用IO流存取数据时,是一个编码与解码的过程的,我们用的开发工具基本上都是以utf-8的规则进行编码和解码的,而我们用的操作系统大多数都是windows(中文系统),而它的的编码和解码方式都是以GBK为准的,当我们用输入流将文件中的数据读取到内存时,文件是以GBK的规则进行编码的,当开发工具使用utf-8的规则去解码,显然是行不通的,所以会出现乱码。
转换流解决IO乱码
转换流可以指定解码和编码的方式 具体如下⬇⬇⬇⬇⬇⬇
字符输入转换流
构造函数
//1.默认解码格式构造方法
//参数FileInputStream对象 默认编码格式(utf-8)
InputStreamReader isr0 = new InputStreamReader(new FileInputStream("E:\\上传的文件\\a.txt"));
//2.指定解码格式构造方法
//参数1.FileInputStream对象 参数2.指定解码格式
InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\上传的文件\\a.txt"),"gbk");
实例
将"E:\上传的文件\a.txt"中的数据以GBK的解码方式输出到控制台
InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\上传的文件\\a.txt"),"gbk");
char[] strs = new char[1024];
int len =0;
while ((len=isr.read(strs))!=-1){
System.out.print(new String(strs,0,len));
}
isr.close();
字符输出转换流
构造函数
//1.默认编码构造方法
//参数FileOutputStream对象 默认编码格式(utf-8)
OutputStreamWriter osw01 = new OutputStreamWriter(new FileOutputStream("E:\\上传的文件\\a0.txt"));
//2.指定编码构造方法
//参数1.FileOutputStream对象 参数2.想要编码的格式
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\上传的文件\\a0.txt"),"gbk");
实例
将“你好啊”以GBK编码的方式写入“E:\上传的文件\a0.txt”文件
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\上传的文件\\a0.txt"),"gbk");
osw.write("你好啊");
osw.close();