Java:文件转换流(解决编码问题,防止出现乱码)
Posted il_持之以恒_li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java:文件转换流(解决编码问题,防止出现乱码)相关的知识,希望对你有一定的参考价值。
字符集charset
也叫编码表。是一个系统支持的所有字符的集合,包括各国家文字、标点符号、图形符号、数字等。
GBxxx字符集:gbk、gb2312、gb18030(最新的中文码表)
InputStreamReader
FileReader可以读取idea默认编码格式(utf-8)的文件,读取系统默认编码(中文gbk)会产生乱码
gbk中文码表,使用两个字节存储一个中文,utf-8国际标准码表,使用三个字节存储一个中文
package file_main;
import java.io.FileReader;
import java.io.Reader;
public class Test2 {
public static void main(String[] args) throws Exception{
Reader reader = new FileReader("C:\\\\Users\\\\27427\\\\Desktop\\\\1.txt");
// 这个文件是在电脑桌面新建的一个文件
char[] chars = new char[1024];
int count=reader.read(chars);
System.out.println(new String(chars,0,count));
reader.close();
}
}
// 结果乱码
使用InputStreamReader来读取
package file_main;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class Test2 {
public static void main(String[] args) throws Exception{
Reader r = new InputStreamReader(new FileInputStream("C:\\\\Users\\\\27427\\\\Desktop\\\\1.txt"),"gbk");
char[] chars = new char[1024];
int count=r.read(chars);
System.out.println(new String(chars,0,count));
r.close();
}
}
OutputStreamWriter(父类为Writer,是字符流通向字节流的桥梁,可使用指定charset将要写入流中的字符编码成字节)
构造方法
OutputStreamWriter(OutStream out)
OutputStreamWriter(OutStream out,String charsetName)
package file_main;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Test2 {
public static void main(String[] args) throws Exception{
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("C:\\\\Users\\\\27427\\\\Desktop\\\\1.txt"),"utf-8");
writer.write("你好!");
writer.flush();
writer.close();
}
}
转换文件编码步骤
- 创建InputStreamReader对象,构造方法中传递字节输入流和指定的编码名称
- 创建OutputStreamWriter对象,构造方法中传递字节输出流和指定的编码名称
- 使用InputStreamReader对象相应的方法读取文件
- 使用OutputStreamWriter对象中相应方法,把读取的 数据写入到文件中
- 释放资源
以上是关于Java:文件转换流(解决编码问题,防止出现乱码)的主要内容,如果未能解决你的问题,请参考以下文章