JavaSE-18.2.2【字符串中的编解码问题、字符流中的编解码问题】
1 package day9.lesson2; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Arrays; 5 6 /* 7 2.3 字符串中的编码解码问题 8 9 byte[] getBytes() 使用平台的默认字符集将该 String编码为一系列字节 10 byte[] getBytes(String charsetName) 使用指定的字符集将该 String编码为一系列字节 11 String(byte[] bytes) 使用平台的默认字符集解码指定的字节数组来创建字符串 12 String(byte[] bytes, String charsetName) 通过指定的字符集解码指定的字节数组来创建字符串 13 14 PS:平台指集成开发环境软件IDE 15 */ 16 public class StringDemo { 17 public static void main(String[] args) throws UnsupportedEncodingException { 18 String s = "中国"; 19 20 byte[] bytes = s.getBytes(); 21 System.out.println(bytes); //[B@4554617c 22 System.out.println(Arrays.toString(bytes)); //[-28, -72, -83, -27, -101, -67] <--平台(IDEA)默认UTF-8 23 // bytes = s.getBytes("UTF-8"); 24 // System.out.println(Arrays.toString(bytes)); //[-28, -72, -83, -27, -101, -67] 25 // bytes = s.getBytes("GBK"); 26 // System.out.println(Arrays.toString(bytes)); //[-42, -48, -71, -6] 27 28 String string = new String(bytes); 29 System.out.println(string); //中国 30 string = new String(bytes, "UTF-8"); 31 System.out.println(string); //中国 32 string = new String(bytes, "GBK"); 33 System.out.println(string); //涓浗 34 35 36 String ss = "中国"; 37 //编码 38 byte[] bys = ss.getBytes("GBK"); 39 System.out.println(Arrays.toString(bys)); //[-42, -48, -71, -6] 40 //解码 41 String sss = new String(bys, "GBK"); 42 System.out.println(sss); //中国 43 } 44 }
1 package day9.lesson2; 2 3 import java.io.*; 4 5 /* 6 2.4 字符流中的编码解码问题 7 8 字符流抽象基类 9 Reader:字符输入流的抽象类 10 Writer:字符输出流的抽象类 11 12 字符流中和编码解码问题相关的两个类 13 InputStreamReader (extends Reader) 14 是从字节流到字符流的桥梁 15 它读取字节,并使用指定的编码将其解码为字符 16 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集 17 OutputStreamWriter (extends Writer) 18 是从字符流到字节流的桥梁 19 是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节 20 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集 21 22 构造方法 23 InputStreamReader(InputStream in) 使用默认字符编码创建InputStreamReader对象 24 InputStreamReader(InputStream in,String chatset) 使用指定的字符编码创建InputStreamReader对象 25 OutputStreamWriter(OutputStream out) 使用默认字符编码创建OutputStreamWriter对象 26 OutputStreamWriter(OutputStream out,String charset) 使用指定的字符编码创建OutputStreamWriter对象 27 */ 28 public class ConversionStreamDemo { 29 public static void main(String[] args) throws IOException { 30 /*FileOutputStream fos = new FileOutputStream("stage2\\src\\day9\\lesson2\\osw.txt"); 31 OutputStreamWriter osw = new OutputStreamWriter(fos);*/ 32 33 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("stage2\\src\\day9\\lesson2\\osw.txt")); 34 osw.write("中国"); 35 osw.close(); 36 // 文本文件:中国 37 38 OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("stage2\\src\\day9\\lesson2\\osw.txt"), "UTF-8"); 39 osw2.write("中国"); 40 osw2.close(); 41 // 文本文件:中国 42 43 OutputStreamWriter osw3 = new OutputStreamWriter(new FileOutputStream("stage2\\src\\day9\\lesson2\\osw.txt"), "GBK"); 44 osw3.write("中国"); 45 osw3.close(); 46 // 文本文件:�й� 47 48 InputStreamReader isr = new InputStreamReader(new FileInputStream("stage2\\src\\day9\\lesson2\\osw.txt"), "GBK"); 49 //一次读取一个字符 50 int ch; 51 while ((ch=isr.read()) != -1){ 52 System.out.print((char)ch); 53 } //中国 54 isr.close(); 55 } 56 }