话不多说,代码先行!
public class BufferedReaderTestClient1 {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("Test1"), "GB2312"));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Test1ToUTF8"), "UTF-8"))) {
char[] container = new char[64];
int len;
while ((len = reader.read(container)) != -1) {
writer.write(container, 0, len);
}
} catch (Exception exception) {
}
}
}
我们在"Test1
"文件中写入如下字符,并以GB2312
的格式进行保存:
写入BufferedWriter字符串1
写入BufferedWriter字符串2
写入BufferedWriter字符串3
以UTF-8编码格式打开
д��BufferedWriter�ַ���1
д��BufferedWriter�ַ���2
д��BufferedWriter�ַ���3
可以看出,英文和数字没有乱码,中文乱码了!我们可以猜测,大概是英文和数字在编码表中位置基本都是一样的,而中文就不一样了,因此就乱码了。
OK,猜测完,我们运行一下代码!
在项目目录下,生成了一个文件"Test1ToUTF8
",使用UTF-8
格式打开:
写入BufferedWriter字符串1
写入BufferedWriter字符串2
写入BufferedWriter字符串3
那用GB2312
编码格式打开呢?
鍐欏叆BufferedWriter瀛楃涓?
鍐欏叆BufferedWriter瀛楃涓?
鍐欏叆BufferedWriter瀛楃涓?
似乎,又不认识了哈…
上方的代码,其实就是完成了编码的格式的转换。
原理,很简单。程序用"GB2312
“格式打开文件”Test1
",因为文件就是"GB2312
“格式的,所以可以正常读取里面的字符,将读取到的字符再用”UTF-8
“编码格式写入另外一个文件”Test1ToUTF8
",此时,文件"Test1ToUTF8
“的格式就是”UTF-8
"编码格式。所以,就完成了编码的格式转换!
总之,文件以什么格式编码写入的,就以什么编码格式读取,这样才不会乱码,因为编码的规则是一样的嘛!否则,可能会出现乱码!