获取系统支持的字符集

Charset.availableCharsets();  // Java

编解码

编码:字符 -> 字节 ;
解码:字节 -> 字符;

字符集

ASCII : American Standard Code for Information Interchange

7 bit来表示一个字符,共计可以表示 128 种字符。

IOS-8859-1

8 bit来表示一个字符,一个字节表示一个字符,基于 ASCII 向后扩展,完全兼容 ASCII,共计可以表示 256 种字符。

GB2312

2个字节(16位)表示一个汉字。

GBK

扩展了 GB2312, 增加生僻字。

GB18030

继续扩展了GBK。

Big5

台湾,繁体字。

Unicode 编码方式

全球统一字符,两个字节表示一个字符,256^2 个字符。

UTF: Unicode Translation Format

由于 Unicode 存储问题(2个字节),诞生了 UTF,本质上 UTF 是一种存储方式,而不是编码方式。
UTF 存在: UTF-8,UTF-16 (UTF-16LE,UTF-16BE),UTF-32 。
UTF-16 :ZERO WIDTH NO-BREAK SPACE : 0xFEFF (BE) , 0xFFFE (LE)。

UTF-8

变长字节表示形式,兼容: IOS-8859-1;
通过3个字节表示一个中文;

BOM

Byte Order Mark , Windows遗留问题,BOM是用来判断文本文件是哪一种Unicode编码的标记,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部。

在不同的Unicode编码中,对应的bom的二进制字节如下:

FE FF     -- UTF16BE
FF FE     -- UTF16LE
EF BB BF  -- UTF8