特性 | UTF-8 | UTF-16 | UTF-32 |
基本单位 | 8 位(1 字节) | 16 位(2 字节) | 32 位(4 字节) |
字符字节数 | 1 到 4 字节 | 2 或 4 字节 | 固定 4 字节 |
字节序 | 无字节序问题(通常无 BOM) | 有字节序问题(UTF-16BE / UTF-16LE),通常有 BOM | 有字节序问题(UTF-32BE / UTF-32LE),通常有 BOM |
空间效率 | 对英文最节省,对中文也较节省 | 对常用亚洲文字可能较节省 | 最低效,除非全部是 4 字节字符 |
处理复杂性 | 变长,处理逻辑相对复杂 | BMP 内字符固定,辅助平面变长,略复杂 | 固定长度,处理最简单 |
主要应用 | Web、Linux/Unix、文件、网络传输 | Windows API、Java 内部、JavaScript | 极少用于存储/传输,主要用于内部处理 |
UTF-8
变长的 Unicode 字符编码,8 位(1 字节)为基本单位,一个字符可以占用 1 到 4 个字节。
UTF8mb3
MySQL 数据库中的一种 UTF-8 实现,它最多支持每个字符使用 3 个字节。
在 MySQL 5.5.3 版本之前,MySQL 内部实现的 utf8
字符集并没有完全遵循 Unicode 联盟定义的标准 UTF-8。
不支持:
- 表情符号 (emoji)
- 许多不常用的汉字和一些历史文字
- 一些复杂的数学符号和特殊符号
UTF8mb4
MySQL 数据库中对完整 UTF-8 标准的实现。
UTF-16
变长的 Unicode 字符编码,16 位(2 字节)为基本单位,一个字符可以占用 2 个或 4 个字节。
UTF-32
固定长度的 Unicode 字符编码,每个字符都占用 32 位(4 字节)。
ISO 8859-1
占用一个字节,不支持汉字等其他字符。
GB2312(国标)
汉字占用2个字节,非汉字字符(如字母、数字、标点符号等)占用1个字节主要覆盖简体汉字,(对汉字支持不够全面)。
GBK(国标扩展)
兼容GB2312,所需字节数与GB2312一样,GB2312中的字符在GBK中有相同的编码,相对于GB2312添加了繁体字,生僻字,东亚其他文字的支持。
GB18030
基本覆盖了中国所有的汉字(包括少数民族文字)和常用字符需求。