转换流:字节流转为字符流,处理乱码(编码集、解码集)
1.编码与解码概念
编码:字符 ---编码字符集->二进制
解码:二进制--解码字符集->字符
2.乱码原因:
1)编码与解码的字符集不统一
2)字节缺少,长度丢失
举例:一个汉字由两个字节组成,如果长度只能读1个,就会乱码
package IOCoversion;
import java.io.UnsupportedEncodingException;
public class CoversionDemo1 {
public static void main(String[] args) throws UnsupportedEncodingException{
String str="中国";
//编译 char-->byte
byte[] data=str.getBytes();
//编码与解码字符集统一
//解码
System.out.println(new String(data));
data=str.getBytes("gbk");//设定编码字符集
//不统一出现乱码
System.out.println(new String(data));
//编码
byte[] data2="中国".getBytes("utf-8");
//解码
str=new String (data2,"utf-8");
System.out.println(str);
}
}
package e_IOCoversion;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
/**
* 转换流:字节转为字符
* 1、输出流 OutputStreamWriter 编码
* 2、输入流InputStreamReader 解码
* @author john
*
*/
public class CoversionDemo2 {
//指定解码字符集
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(
new InputStreamReader(
new FileInputStream(new File("G:/iotest/IOCoversion/b.txt")),"UTF-8")
);
String info=null;
while(null!=(info=br.readLine())){
System.out.println(info);
}
//写出文件
BufferedWriter bw=new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(new File("G:/iotest/IOCoversion/bb.txt"),true))
);
String str="我不喜欢你皮";
bw.write(str);
bw.flush();
br.close();
bw.close();
}
}