编码:将字符串通过一系列对应规则转化为字节数组的过程
解码:将字节数组按照编码相反的规则转化为字符串的过程。
使用Charset.availableCharsets()可以获得当前系统可用编码的Map集合。
@Test
public void test1() {
//获取系统的所有可用编码
for (Map.Entry<String, Charset> charsetEntry : Charset.availableCharsets().entrySet()) {
System.out.println(charsetEntry.getKey() + "=" + charsetEntry.getValue());
}
}
获取系统可用的字符集编码
使用GBK对字符串进行编码和节码。同时测试使用UTF-8对GBK编码的字符串进行节码。
@Test
public void test2() throws CharacterCodingException {
Charset cs1 = Charset.forName("GBK");
//获取编码器
CharsetEncoder ce = cs1.newEncoder();
//获取解码器
CharsetDecoder cd = cs1.newDecoder();
CharBuffer cBuf = CharBuffer.allocate(1024);
cBuf.put("你好啊");
cBuf.flip();
//编码
ByteBuffer bBuf = ce.encode(cBuf);
for (int i = 0; i < 6; i++) {
System.out.println(bBuf.get());
}
//解码
bBuf.flip();
CharBuffer cBuf2 = cd.decode(bBuf);
System.out.println(cBuf2.toString());
System.out.println("-------------------------");
//使用UTF-8解码器对GBK编码的字符串进行节码,会出现乱码结果
Charset cs2 = Charset.forName("UTF-8");
bBuf.flip();
CharBuffer cBuf3 = cs2.decode(bBuf);
System.out.println(cBuf3.toString());
}
编解码测试






网友评论