1. 编码表 -- 由字符及其对应的数组组成的一张表
常见的编码表
ASCII码表 -- 0到127 7byte --> char
ISO-8859-1码表 -- 拉丁码表 1Byte=8byte --> char
gb2312码表 --
GBK码表 -- 简体中文码表 2Byte --> char
GB18030码表
BIG5码表 -- 台湾(繁体中文)
unicode编码 --
UTF-8 -- 按照数据的区域来决定存储的字节数 3Byte --> char
于是 UTF-8的两个汉字对应 GBK码表的三个汉字
2. 字符串的编码
public class test2_char {
public static void main(String[] args){
//字符串的编码和解码
try {
String s = "你好";
byte[] bys = s.getBytes("UTF-8");
System.out.println(Arrays.toString(bys));
String result = new String(bys, "UTF-8");
System.out.println(result);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3. 转换流
转换流的特点:
1. 其是字符流和字节流之间的桥梁
2. 可对读取到的字节数据经过指定编码转换成字符
3. 可对读取到的字符数据经过指定编码转换成字节
什么时候使用转换流呢?
1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。提高对文本操作的便捷。
2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。
具体的对象体现:
1. InputStreamReader:字节到字符的桥梁
2. OutputStreamWriter:字符到字节的桥梁
这两个流对象是字符体系中的成员,它们有转换作用,本身又是字符流,所以在构造的时候需要传入字节流对象进来。
public class IOEncodeDemo {
public static void main(String[] args) throws IOException {
//采用指定的编码读取txt文件
InputStreamReader isr = new InputStreamReader(new FileInputStream(
"osw.txt"), "UTF-8");
char[] chs = new char[1024];
int len = 0;
while((len=isr.read(chs))!=-1){
System.out.println(String.valueOf(chs, 0, len));
}
isr.close();
}
}
public class test2_char {
public static void main(String[] args){
try {
//采用指定的编码写txt文件
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("c://c.txt"), "GBK");
osw.write("Java很好啊");
osw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}