字符集相关知识基础
Question:
字符在计算机中怎样表示?
如何完成字符和其所对应码值之间的转换?
字符在计算机中的存储和表示,都是字符对应的整数值,这个值就是编码值。
在转化字符和码值时,需要有一个字符集或编码表,描述字符和其编码值之间的对应关系,将字符转化成码值的过程叫编码,将码值还原成字符的过程叫解码,这两个过程都离不开字符集。
编码
当我们向计算机中输入数据,此时计算机会先求字符对应的码值,并保存字符对应的编码值。
解码
当我们需要输出字符时,计算机会根据字符对应的编码值,求出其对应的字符,然后输出。
为什么会出现乱码?
那是因为编码和解码采用的字符集并不相同。不同语言的字符集是不相同的,为了解决这个问题,人们定义了一种能包含所有已知字符的字符集,并且给每个字符都分配了唯一的编码值——Unicode字符集,用两个字节表示字符的编码值,但这个字符集只规定了编码值。编码值在计算机中存储的时候,可以有不同的存储方式,因此Unicode字符集有很多变种。
UTF-8
UTF-8定义了一种区间规则,这种规则可以和ASCII编码保持最大程度兼容。
表示字符所需字节数 | 字符编码值 |
---|---|
1字节 | 0xxxxxxx |
1字节 | 110xxxxx xxxxxxxx |
1字节 | 1110xxxx 10xxxxxx 10xxxxxx |
UTF-16
UTF-16遵循Unicode的编码规则,用两个字节编码一个字符,JVM 也是采用该字符集。
其它常见字符集
字符集 | 描述 |
---|---|
ASCII | 美国标准信息交换码 |
ISO8859-1 | 拉丁码表,欧洲通用 |
GB2312 | 中国的中文编码表 |
GBK | 中国的中文编码表,是GBK升级版 |
GB18030 | 中国的中文编码表 |
BIG-5 | 繁体中文字符,大五码 |