1. 基础

  • 编码 : 字符 -> 字节

  • 解码 :字节 -> 字符

2. 使用

2.1. 标准库函数

Charset类方法:

方法 描述
Set aliases() 返回该字符集别名的集合
static SortedMap<String,​Charset> availableCharsets() 构造从规范字符集名称到字符集对象的排序映射。
boolean canEncode() 判断该字符集是否可以编码
int compareTo​(Charset that) 和另一个字符集比较
abstract boolean contains​(Charset cs) 判断该字符集是否包含that字符集
CharBuffer decode​(ByteBuffer bb) 解码该字符集的字节缓冲区为unicode字符缓冲区
static Charset defaultCharset() 返回当前环境下的默认字符集
String displayName() 返回该字符集在当前环境下的名称
String displayName​(Locale locale) 返回该字符集在给定地区的的名称
ByteBuffer encode​(String str) 将字符串编码为当前字符集的字节
ByteBuffer encode​(CharBuffer cb) 将unicode字符编码为字节
boolean equals​(Object ob) 是否和另一个Object相等
static Charset forName​(String charsetName) 由字符集的名字获取该字符集的Charset对象
int hashCode() 计算该字符集的哈希值
boolean isRegistered() 判断该字符集是否在IANA注册
static boolean isSupported​(String charsetName) 判断该名称的字符集是否被支持
String name() 返回该字符集的名称
abstract CharsetDecoder newDecoder() 构造一个该字符集的解码器
abstract CharsetEncoder newEncoder() 构造一个该字符集的编码器
String toString() 返回一个能描述该字符集的字符串

2.2. 查看支持的字符集

public void test() {
    Map<String,Charset> map = Charset.availableCharsets();
    
    Set<Entry<String,Charset>> set = map.entrySet();
    
    for(Entry<String,Charset> entry : set){
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

2.3. 编码器与解码器

public void test2()throws IOException{
    //获取字符集
    Charset charSet = charset.forName("GBK");
    //获取编码器
    CharsetEncoder ce = charset.newEncoder();
    //获取解码器
    ChaesetDecode cd = charset.newDecoder();

    CharBuffer buf1 = CharBuffer.allocate(1024);
    buf1.put("穷且益坚,不坠青云之志!");
    buf1.flip();
    //编码
    ByteBuffer byteBuf = ce.encode(buf1);
    
    for(int i = 0;i < byteBuf.limit();i++){
        System.out.println(byteBuf.get());
    }
    //解码
    byteBuf.rewind();
    CharBuffer charBuf = cd.decode(byteBuf);
    
    System.out.println(charBuf.toString());
}