JavaSE笔记15.16-IO流-字符编码
1. 字符编码解码
(1)通过转换流
通过转换流InputStreamReader和OutputStreamWriter来完成,在两个对象进行构造时可加入字符集。
//创建使用给定字符集的InpuStreamReader
InputStreamReader(InputStream in,Charset cs);
//创建使用给定字符集的OutputStreamWriter
OutputStreamWriter(OutputStream out,Charset cs);
(2)通过字符串对象
//通过使用指定的字符集来解码byte数组,构造一个新的String
String(byte[] bytes,String charsetName);
//使用指定字符集将String编码为byte序列,并将结果存储到一个新的byte数组中
byte[] getBytes(String charsetName);
2. 常见的编码表
- ASCII:美国标准信息交换码;用一个字节的7位可以表示
- ISO8859-1:拉丁码表,欧洲码表;用一个字节的8位可以表示
- GB2312:中国的中文编码表;中文字符用2个字节表示,英文字符用1个字节表示
- GBK:中国的中文编码表升级;中文字符用2个字节表示,英文字符用1个字节表示
- UTF-8:国际化编码表;最多能用3个字节表示字符
3. 例子
(1)通过转换流
import java.io.*;
public class EncodeDemo {
public static void main(String[] args) throws IOException {
writeText();
readText();
}
public static void readText() throws IOException {
//指定字符集为GBK
InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt"),"gbk");
char[] buf=new char[10];
int len=isr.read(buf);
System.out.println(new String(buf,0,len));
}
public static void writeText() throws IOException {
//指定字符集为UTF-8
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("utf.txt"),"UTF-8");
osw.write("你好");
osw.close();
}
}
(2)通过字符串对象
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class EncodeDemo2 {
public static void main(String[] args) throws UnsupportedEncodingException {
//字符编码,将字符串转成字节数组
String s="你好";
byte[] b1=s.getBytes("utf-8");
System.out.println(Arrays.toString(b1));
//字符解码,将字符数组转成字符串
String s1=new String(b1,"iso8859-1");
System.out.println("s1="+s1);
}
}