从事软件开发工作的人员经常会遇见字符编码问题,比如常见的“乱码”。
乱码是由于系统或软件缺乏对某种字符编码的支持,而产生的不能正常阅读的混乱字符。
一.,字符、字符集与字符编码
字符是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等等。
字符集是多个字符的集合。字符集种类很多,常见的字符集有:ASCII、GBK、Unicode、BIG5等,每个字符集包含的字符个数各不一样。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。
字符编码和字符集区别:
- 字符编码和字符集不一样,字符集只是字符的集合,不一定适合作网络传送、处理,有时须经编码(encode)后才能应用。如Unicode可依不同需要以UTF-8、UTF-16、UTF-32等方式编码。
- 字符编码就是以二进制的数字来对应字符集的字符。因此,对字符进行编码,是信息交流的技术基础。
通俗来讲,使用哪些字符,也就是说哪些汉字、字母和符号会被收入标准中,所包含“字符”的集合就叫做“字符集”。规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。
注意:Unicode字符集有多种编码方式,如UTF-8、UTF-16等;ASCII只有一种;大多数MBCS(包括GB2312)也只有一种。
2,编码概念初识
计算机存放数据只能存放数字,所有的字符都会被转换为不同的数字(也就是上面所说的编码)。
就像一个棋盘一样,不同的字,处于不同的位置,而不同的位置,有不同的数字编号。
有的棋盘很小,只能放数字和英文
有的大一点,还能放中文
有的“足够”大,能够放下世界人民所使用的所有文字和符号
如图所示,英文字符 A 能够放在所有的棋盘里,而且位置都差不多
中文字符, 中文字符 中 能够放在后两种棋盘里,并且位置不一样,而且在小的那个棋盘里,就放不下中文