|
字符流的出现为了方便操作字符
通过子类转换流完成 - InputStreamReader
- OutputStreamWriter
在构造2个对象时加入字符集
常见编码表 - ASCII:美国标准信息交换码。用一个字节7位表示。
- ISO8859-1:拉丁码表。欧洲码表。用一个字节8位表示。
- GB2312:中文编码
- GBK:中文编码升级,融合更多的中文文字符号
- Unicode:国际标准码。所有文字都用两个字节表示,JAVA语言使用的是unicode
- UTF-8:最多用三个字节表示一个字符。
- import java.io.*;
- public class EncodeStream {
- public static void main(String[] args) throws IOException {
- //获取字符,用对应的编码表编码后存储到硬盘中,字符---字节,编码
- OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"),"UTF-8");
- osw.write("您好");
- osw.close();
- //获取硬盘上的编码数字,用编码表找到对应的字符,并打印,字节-字符,解码
- InputStreamReader isr=new InputStreamReader(new FileInputStream("gbk.txt"),"UTF-8");
- char[]buf=new char[1024];
- int len=0;
- while((len=isr.read(buf))!=-1){
- System.out.println(new String(buf,0,len));
- }
- isr.close();
- }
- }
复制代码编码:字符串变成字节数组
解码:字节数组变成字符串
String->byte:str.getBytes(charsetName)
byte[]-String:new String(byte[],charsetName) - import java.io.UnsupportedEncodingException;
- import java.util.Arrays;
- public class EncodeDemo {
- public static void main(String[] args) throws UnsupportedEncodingException {
- String s="您好";
- //gbk编码的数字
- byte[] b1=s.getBytes("gbk");
- System.out.println(Arrays.toString(b1));
- //对数字进行iso8859-1解码
- String s1=new String(b1,"iso-8859-1");
- System.out.println(s1);
- //获取解码后字符的数字编码
- byte[] b2=s1.getBytes("iso-8859-1");
- System.out.println(Arrays.toString(b2));
- //数字采用正确的编码表解码
- String s2= new String(b2,"gbk");
- System.out.println(s2);
- }
- }
复制代码
|