1. 由于字节流操作中文不是特别方便,所以Java就提供了转换流。
字符流 = 字节流 + 编码表
2. 编码表
由字符及其对应数值组成的一张表
常见的编码表:
• ASCII/Unicode字符集
• ISO-8859-1
• GB2312/GBK/GB18030
• BIG5
• UTF-8
3. String类中编码和解码问题:
(1)String中使用构造方法:(解码)
String(byte[] bytes, String charsetName)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的
String
。
解码:把看不懂的变成看得懂的
byte[] -- String
(2)String中使用功能方法:(编码)
byte[] getBytes(String charsetName)
使用指定的字符集将此 String
编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
编码:把看得懂的变成看不懂的
String -- byte[]
(3)代码示例:
1 package cn.itcast_01; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Arrays; 5 6 /* 7 * String(byte[] bytes, String charsetName):通过指定的字符集解码字节数组 8 * byte[] getBytes(String charsetName):使用指定的字符集合把字符串编码为字节数组 9 * 10 * 编码:把看得懂的变成看不懂的 11 * String -- byte[] 12 * 13 * 解码:把看不懂的变成看得懂的 14 * byte[] -- String 15 * 16 * 举例:谍战片(发电报,接电报) 17 * 18 * 码表:小本子 19 * 字符 数值 20 * 21 * 要发送一段文字: 22 * 今天晚上在老地方见 23 * 24 * 发送端:今 -- 数值 -- 二进制 -- 发出去 25 * 接收端:接收 -- 二进制 -- 十进制 -- 数值 -- 字符 -- 今 26 * 27 * 今天晚上在老地方见 28 * 29 * 编码问题简单,只要编码解码的格式是一致的。 30 */ 31 public class StringDemo { 32 public static void main(String[] args) throws UnsupportedEncodingException { 33 String s = "你好"; 34 35 // String -- byte[] 36 byte[] bys = s.getBytes(); // [-60, -29, -70, -61] 37 // byte[] bys = s.getBytes("GBK");// [-60, -29, -70, -61] 38 // byte[] bys = s.getBytes("UTF-8");// [-28, -67, -96, -27, -91, -67] 39 System.out.println(Arrays.toString(bys)); 40 41 // byte[] -- String 42 String ss = new String(bys); // 你好 43 // String ss = new String(bys, "GBK"); // 你好 44 // String ss = new String(bys, "UTF-8"); // ??? 45 System.out.println(ss); 46 } 47 }