IO流体系(学到哪扩展到哪):
学习字符转换流的目的是为了什么?
InputStreamReader---解决不同编码时字符流读取文本内容乱码的问题
OutPutStreamWrite---可以控制写出去的字符使用什么字符集编码
为什么会有乱码呢?因为读取的文件内容编码与平台运行代码默认的UTF-8编码不同导致解读出错
为什么要控制字符集编码?为了满足写的文件的编码方式
一. 字符转换输入流(InputStreamReader)
目的:解决不同编码时字符流读取文本内容乱码的问题
解决思路:先获取文件的原始字节输入流,再将其按真实的字符集编码转成字符输入流 这样字符输入流中的字符就不会乱码了
构造器: 1.new InputStreamReader(new InputStream("文件地址"))---默认utf-8
2.new InputStreamReader(new InputStream("文件地址"),"字符集编码类型")
实例:读取下面文件的内容:注意编码“GBK”
分析:这个时候就不能上面的构造器1,因为默认UTF-8编码和文件的编码GBK不同,会乱码。就只能使用构造器2,设置解读的编码为GBK
2.new InputStreamReader(new InputStream("文件地址"),"GBK")
步骤:
先创建低级字节输入流,再包装成字符转换输入流这个时候编写读取的编码形式,再包装成缓冲流---提速 ,最后读取代码。
这里使用了自动关闭流的方法try-with-resource,详见传送门:http://t.csdnimg.cn/8hXRz
为什么这里是(text=br.readLine())!=null 因为readLine() 读取一行的字符数据 没有就返回null
详见传送门:http://t.csdnimg.cn/rvlP8
运行结果:
二.字符转换输出流(OutputStreamWriter)
目的:可以控制写出去的字符使用什么字符集编码
解决思路:获取字节输出流 再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码
补充刷新流知识:OutputStreamWriter与BufferedWriter一样,OutputStreamWriter也有flush()方法,可以手动刷新输出流,将缓冲区中的数据写入到目标中。但是和BufferedWriter不同的是,OutputStreamWriter是在流关闭时会自动刷新缓冲区的,所以在使用OutputStreamWriter时,不需要手动调用flush()方法来刷新输出流。只需要在不再需要使用流时,关闭流即可。
构造器:OutputStreamWriter out=new OutputStreamWriter(低级字节输出流,"编码类型")
要控制写出去的字符使用什么字符集编码 该怎么做: 1.使用String提供的getByets方法解决 String date="我爱你了"; bytes[] ar= date.getBytes("GBK") 2.使用 字节转换输出流 实现
这里介绍的是字符转换输出流喔:
步骤:创建低级字节输出流,再包装成字符转换输出流这个时候设置写的文件编码格式,再使用缓冲流进行包装--提速,最后就是写数据进文件
具体实例:
注意:运行第二次的时候不会追加相同的数据了,解决方法就是,在低级字节输出流创建时的地址后加true:
以上就是关于文件与代码编码不同的解决方法,至此完毕。
感谢各位大佬观看,求免费的赞和收藏关注喔!!!