标签:java
通常而言,把明文的字符序列转换成计算机能理解的二进制序列称为编码,把二进制序列转换成普通人能看懂的明文字符串称为解码。
JDK1.4提供了Charset来处理字节序列和字符序列之间的转换关系,该类包含了用于创建解码器和编码器的方法,还提供了Charset所支持的字符集的方法,Charset类是不可变的。
Charset类提供了一个availableCharset()的静态方法来获取当前JDK所支持的所有字符集,下面小试牛刀
-
import java.nio.charset.Charset;
-
import java.util.SortedMap;
-
public class Test {
-
public static void main(String[] args) throws Exception
-
{
-
SortedMap<String,Charset> sm= Charset.availableCharsets();
-
for(String str:sm.keySet())
-
{
-
System.out.println(sm.get(str));
-
}
-
}
-
}
结果如下
一旦知道了字符集的别名之后,程序就可以调用Charset的forName()来创建对应的Charset对象,forName()方法的参数就是相应字符集的别名
Charset cs=Charset.forName("ISO-8859-1");
Charset cs=Charset.forName("GBK");
获得了Charset对象的之后,就可已通过该对象的newDecode()和newEncode()这两个方法分别返回CharsetDecode和CharsetEncode对象,代表该Charset的解码器和编码器,调用CharsetDecode的decode()方法就可以将ByteBuffer转换成CharBuffer,调用CharsetEncode就可以将CharBuffer或String转换成ByteBuffer。
-
import java.nio.ByteBuffer;
-
import java.nio.CharBuffer;
-
import java.nio.charset.Charset;
-
import java.nio.charset.CharsetDecoder;
-
import java.nio.charset.CharsetEncoder;
-
public class Test {
-
public static void main(String[] args) throws Exception
-
{
-
Charset cs=Charset.forName("GBK");
-
CharsetDecoder cd=cs.newDecoder();
-
CharsetEncoder ce=cs.newEncoder();
-
CharBuffer cb=CharBuffer.allocate(6);
-
cb.put("张");
-
cb.put("译");
-
cb.put("成");
-
cb.flip();
-
ByteBuffer bb=ce.encode(cb);
-
for(int i=0;i<bb.capacity();i++)
-
{
-
System.out.println(bb.get(i));
-
}
-
System.out.println(cd.decode(bb));
-
}
-
}
Charset还提供了一下方法处理编码问题
CharBuffer decode(ByteBuffer bb)
ByteBuffer encode(CharBuffer cb)
ByteBuffer encode(String str)
我就不解释这三个方法了,估计都能估计出来
版权声明:本文为博主http://www.zuiniusn.com原创文章,未经博主允许不得转载。
Java字符集
标签:java
原文地址:http://blog.csdn.net/u013948190/article/details/46828947