字符集与编码-概念区分

  在这里主要记录一下字符集与编码这两个概念,因为在日常编程当中很容易把这两个概念弄混掉。对这两个概念做澄清也有利于在编程当中对乱码问题的解决。
  首先来说一下什么字符集。其实字符集是一个抽象的概念,例如我们可以把所有的英文字母称为一个字符集,同样的,所有的中文字符也可以称为一个字符集,或者将人类所有语言中的所有字符称为一个字符集。之所以称之为是抽象的,是因为同一个字符可能有很多中不同的表现形式,例如我们在电脑屏幕上看到的“A”,其实是“A”这个字符的一个中具体的表现形式,可以理解为是“A”的图形化表示,当我们说出“A”时,就是用来字符“A”的另外一种表现形式,也就是声音的表现形式。为了能够以统一的方式表示字符集,人们就对字符集进行了编码,unicode就是一种对字符集的编码形式,称之为编码字符集。在unicode中,为每一个不同的字符都分配了一个唯一的整数,用来便是这个字符。而这种编码字符集的数量不会太多,现在普遍使用的就是unicode这种编码字符集。
  接着,再来说一下编码。虽然unicdoe为每一个字符都分配了一个唯一的整数,但是这个整数在计算机中的存储方式是可以多种多样的。这里就引申出来多种多样的字符集编码,像UTF-8,GBK,UTF-16等等。他们的作用就是规定如何将unicode中代表某个字符的整数以二进制的形式存储到计算机中。也就是说,字符集编码要解决的问题是,用几个byte来表示一个整数以及这几个byte中,高位存储什么,低位又存储什么等等问题?不同的字符集编码都是从某个角度来思考如何方便、有效地将unicode中的字符编码映射到计算机中去。例如UTF-16就是以便长的方式将unicode中的某一个字符对应的整数映射到成二进制形式,这样可以提高存储的效率,但是并不保证二者的值是相等的。而UTF-32则是原封不动地将unicode中的整数映射成二进制形式。

  之所以会有如此多不同的字符集编码方式,其实是随着计算机硬件不断发展的结果,因为计算机中的一次能够读取的字长在不断变化,因此也就出现来多种多样的字符集编码方式。当然,也有一些是考虑了如何提高字符存储效率的,例如utf-16这样的变长编码方式。

你可能感兴趣的:(编程)