Java-Charset(字符集)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyp13243189027/article/details/54406372

Charset(字符集)

Java.nio.charset包中共提供了Charset、CharsetDecoder、CharsetEncoder、CodeResult、CodingErrorAction五个类,均继承自Object类,其中Charset实现了Comparable接口,其它类均为自身实现。 
Java中的字符使用unicode编码,每个字符占用两个字节。字节码本身只是一些数字,放在正确的上下文中可以被正确的解析。向ByteBuffer中存放数据时需要考虑字符集的编码方式,从中读取时需要考虑字符集的解码。 
要读和写文本需要分别使用CharsetDecoder(解码器)和CharsetEncoder(编码器)。 
编码:百科中这样定义,编码(coding)是在一个主题或单元上为数据存储,管理和分析的目的而转换信息为编码值(典型地如数字)的过程。在密码学中,编码是指在编码或密码中写的行为。n位二进制数可以组合成2的n次方个不同的信息,给每个信息规定一个具体码组,这种过程也叫编码。数字系统中常用的编码有两类,一类是二进制编码,另一类是二—十进制编码。 
(1)如何得到一个CharSet? 
在JDK源码中提供两种方式得到一个CharSet实例:

    CharSet cs = CharSet.forName(“编码方式”);
       CharSet cs = CharSet.defaultCharSet();
  • 1
  • 2
  • 1
  • 2

第一种方法返回一个指定字符格式的CharSet,第二种方法返回当前虚拟机默认的字符编码格式的CharSet。 
(2)如何使用CharSet? 
得到一个CharSet实例后,我们需要创建一个编码器和一个解码器,使用下面方法进行创建:

     CharSetDecoder decoder = cs.newDecoder();
       CharSetEncoder encoder = cs.newEncoder();
  • 1
  • 2
  • 1
  • 2

接着我们把ByteBuffer传递给decoder进行编码,返回一个CharBuffer:

       CharBuffer cb = decoder.decode(inputData);
  • 1
  • 1

然后我们可以使用encoder进行解码返回一个ByteBuffer:

     ByteBuffer outputData = encoder.encode(cb);
  • 1
  • 1

接下来可以进行写等其它操作。

example

@Test
    public void test1() {
        Charset charset = Charset.forName("Utf-8");
        System.out.println("是否可用: " + charset.canEncode());
        // 查看别名
        Set<String> set = charset.aliases();
        Iterator<String> iterator = set.iterator();
        System.out.println("-------UTF-8的别名-------------");
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        // 编码1
        System.out.println("-------编码1-------------");
        ByteBuffer buffer = charset.encode("hello");
        System.out.println(buffer);
        System.out.println("缓冲区剩余: " + buffer.remaining());
        // 打印编码后的字符串
        while (buffer.hasRemaining()) {
            System.out.print((char) buffer.get());
        }
        System.out.println("\n缓冲区剩余: " + buffer.remaining());
        // 解码
        System.out.println("-------解码-------------");
        buffer.flip();
        CharBuffer charBuffer = charset.decode(buffer);
        System.out.println(charBuffer.toString());

    }
阅读更多

没有更多推荐了,返回首页