Standard charsets

Java 暂时支持如下的标准编码

  • US-ASCII: 7位ASCII字符。

  • ISO-8859-1: ISO拉丁字母

  • UTF-8:这是8位UCS转换格式。

  • UTF-16BE:这是16位UCS转换格式,字节顺序大

  • UTF-16LE:这是16位UCS变换,以字节顺序表示。

  • UTF-16: 16位UCS转换格式。

Charsets 的编码和解码

字符序列和字节序列的相互转换, 可以是用CharsetEncoder和CharsetDecoder实现。

  • CharsetDemo.java
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.StandardCharsets;

public class CharsetDemo {

    public static void main(String[] args) throws CharacterCodingException {
        // 注意: StandardCharsets是jdk1.7添加的
        Charset charset = StandardCharsets.UTF_8;

        // 从字符集中创建相应的编码和解码器
        CharsetEncoder encoder = charset.newEncoder();
        CharsetDecoder decoder = charset.newDecoder();

        // 构造一个buffer
        CharBuffer charBuffer = CharBuffer.allocate(64);
        charBuffer.put('初');
        charBuffer.put('次');
        charBuffer.put('见');
        charBuffer.put('面');
        charBuffer.put(',');
        charBuffer.put('多');
        charBuffer.put('多');
        charBuffer.put('管');
        charBuffer.put('照');
        charBuffer.put('!');
        charBuffer.flip();

        // 将字符序列转换成字节序列
        ByteBuffer bb = encoder.encode(charBuffer);
        while(bb.hasRemaining()) {
            System.out.print(bb.get() + " ");
        }
        System.out.println();

        // 将字节序列转换成字符序列
        bb.flip();
        CharBuffer cb = decoder.decode(bb);
        System.out.println(cb);
    }
}
  • 日志信息
-27 -120 -99 -26 -84 -95 -24 -89 -127 -23 -99 -94 44 -27 -92 -102 -27 -92 -102 -25 -82 -95 -25 -123 -89 33 
初次见面,多多管照!

参考资料

https://www.programcreek.com/java-api-examples/java.nio.charset.Charset

https://www.concretepage.com/java/example-charset-java-nio

https://blog.csdn.net/voo00oov/article/details/45225161