获取系统支持的字符集
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