1. 什么是Unicode
- Unicode是
字符集
- 它为每一个字符分配了一个唯一ID,即为世界上所有字符都分配了一个唯一ID
- 针对Unicode的字符集实现的编码规则有很多,如utf-8,utf-16,utf-32
- 比如Unicode字符集只是规定了
你
的代号是12345,但是具体编码占几个字节,取决于你选择的编码规则。
2. 什么是ANSI
- ANSI也是
字符集
- ASCII码统一为英文字母分配了唯一ID,前128个表示英文字符、数字、通用符号。
- ANSI是对ASCII的一种拓展。前128个也表示英文字符、数字、通用字符。后面的代号则表示
某一国家
的所有字符。 - 比如,针对中国的ANSI编码为GB2312。针对日本的ANSI编码为Shift_JIS,即各国有各国的标准。
- 最大的缺点是不同语言之间的ANSI码之间不能相互转换,会导致在多语言混合的文本中出现乱码。
3. 什么是UTF-8
- UTF-8 是
编码规则
,是对Unicode字符集编码的实现。 - 它是一套以8位位一个
编码单位
的可变长编码。会将一个码位编码为1到4个字节。 - 英文字符、数字、通用字符占1个字节
- 大部分中文字符占3个字节,少数不常用中文字符占4个字节
- 单子节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;
- n个字节的字符(1<n<=4),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足
0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
4. 什么是utf-16、utf-32
- utf-16会将一个码位编码为2个字节或4个字节
- utf-32会将一个码位统一编码为4个子节
- 会发现这两种编码方式利用率不如utf-8,但是编码方式更简单了。