Charset(字符集)操作
一、编码与解码
编码:字符串 -> 字节数组
解码:字节数组 -> 字符串
二、查看所有字符集
public void Test05(){//获得字符集并输出
SortedMap<String, Charset> so = Charset.availableCharsets();
for (String s : so.keySet()) {
System.out.println(s + "\t" + so.get(s));
}
}
结果输出:
三、字符集操作
@Test//字符集操作
public void Test04() throws CharacterCodingException {
//创建GBK对应的Charset
Charset charset = Charset.forName("GBK");
//获取编码器
CharsetEncoder ce = charset.newEncoder();
//创建一个CharBuffer对象
CharBuffer charBuffer = CharBuffer.allocate(1024);
charBuffer.put("我爱学习");
charBuffer.flip();
//编码成字节并循环访问
ByteBuffer bBuf = ce.encode(charBuffer);
for (int i = 0; i < bBuf.limit(); i++) {
System.out.print(bBuf.get() +"\t");//GBK一个中文占两个字节
//-50 -46 -80 -82 -47 -89 -49 -80
}
System.out.println("\n------------------------------------------------------");
//获取解码器
CharsetDecoder cd = charset.newDecoder();
//解码后输出
bBuf.flip();
CharBuffer cBuf2 = cd.decode(bBuf);
System.out.println(cBuf2.toString());//我爱学习
System.out.println("------------------------------------------------------");
Charset cs2 = Charset.forName("UTF-8");
bBuf.flip();
CharBuffer cBuf3 = cs2.decode(bBuf);
System.out.println(cBuf3.toString());//使用UTF-8解码出现问题
//�Ұ�ѧϰ
}