字符集和字符编码
字符集和字符编码
字符集:character set,规定了字符和二进制数字之间的对应关系
字符编码:character encoding,规定了二进制数字在计算机上的存储方式,也就是如何将字符集中的数字转换为字节序列
常见的字符集
ASCII:美国信息交换标准码,American Standard Code for Interchange Information,采用一个字节存储数据,规定了128个字符和二进制码之间的对应关系,是现今计算机业界标准
ISO-8859-1:扩展了ASCII字符集,增加了西欧语言的字符,包含256个字符。
Unicode字符集:把世界上常用的语言字符都进行了统一的编码,一个数值就代表一个字符,而且世界范围内公认
常见的字符编码
UTF-8
UTF-8编码:是Unicode字符集的一种编码转换规范,也就是怎么存储Unicode代码点的方案之一,UTF-8是一种变长字节编码方式,加入了多余的标识位来区分一个Unicode代码点。
UTF-8的存储方式:对于某一个字符的UTF-8编码,如果只有一个字节则其最高位是0;如果是多字节,其第一个字节从最高位开始,连续的二进制位,值是1的个数决定了字节的个数,其余各字节均以10开头,UTF-8最多可以用到6各字节,
1字节:0xxxxxxx
2字节:110xxxxx 10xxxxxx
3字节:1110xxxx 10xxxxxx 10xxxxxx
4字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
UTF-8中可以用来表示字符编码的实际位数最多有31位,除去控制位,上述x表示的数字和Unicode编码是一一对应的
使用Unicode字符编码来表示字符:
- \ddd:1-3位八进制数所表示的字符;
- \uxxxx: 4位十六进制数所表示的字符
UTF-8中提到的BOM是什么:Byte Order Mark,字节顺序标记,是一个特殊的字符序列,通常出现在文件的开头,帮助文本编辑器或程序正确识别文件的编码方式。对于UTF-8,BOM是一个可选的字节序列,不是必须的,某些编辑器可能不支持BOM
UTF-16
和UTF-8一样,是Unicode字符集的一种编码转换规范,它使用2个或4个字节来表示一个字符,更加适合内存计算,Java语言内部使用UTF-16表示字符串。
char类型是按照Unicode规范实现的一种数据类型,固定两字节,也就是16bit大小
GBK
GB 13000.1-1993的扩展,既是字符集,又是字符编码,作为字符集,它是一个简体中文字符集,作为字符编码,它是一种双字节字符编码,每个字符用两个字节表示