Java.nio.包用Charset类统一对字符集进行转换。字符集建立了两个Unicode码元序列与使用本地字符编码方式的字节序列之间的映射。可以通过调用静态的forName方法来获得一个Charset,只需要向这个方法传递一个官方字符集名字或它的别名:Charset cset=Charset.forName("UTF-8");当本地编码方式模式不能表示所有的Unicode字符,如果某个字符不能表示,它将被转换成?。
可以使用Unicode码元的java字符串和编码而成的字节序列之间进行转换。下面是如何编码Java字符串的代码:
Charset cset=Charset.forName("GBK");
String str="this is java String,这是Java字符串";
ByteBuffer buffer=cset.encode(str);
byte[] bytes=buffer.array();
与之相反,想要解码字节序列,需要有字节缓冲区。使用ByteBuffer数组的静态方法wrap可以将一个字节数组转换成一个字节缓冲区。decode方法的结果是一个CharBuffer,调用它的toString方法可以得到一个字符串。下面是解码的代码:
ByteBuffer bbuf=ByteBuffer.wrap(bytes,0,bytes.length);
CharBuffer cbuf=cset.decode(bbuf);
String str2=cbuf.toString();
System.out.println(str2);