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());
}