下面以字母H在计算机中的存储及显示为例阐述有关字符编码的概念:
1.计算机中存储的一切信息都以0和1(二进制码)的形式存在
2.我们如果想要在计算机中存储字母H,我们需要解决的第一个问题是——如何用二进制码来表示字母H?
3.如果我们再考虑得周全一些,我们会发现我们不仅要存储字母H,我们还有可能要存储其他的大小写英文字母
4.我们还需要考虑到,英文字母有26个,如果有一种固定的转换规则,能够将字母转换成二进制码,那么,52个大小写英文字母对应的二进制码应该是不同的,这样才不至于混淆
5.阿拉伯数字在表示数值和表示文本字符时的意义是不同的,因此我们在存储阿拉伯数字时应该把两种情况区别对待
6.这时,你终于发现,我们有可能还要在计算机里存储一些别的字符,比如逗号,比如换行符,它们有的可以显示在屏幕上,而有的不行
7.综上所述,我们要做的不仅是把字母H用二进制码表示,我们要做的是把我们生活中用到的所有的字符都用二进制码表示,而且不同字符的二进制码应该是不同的,这样才不至于混淆。完成了这项工作,我们才能把信息(如一篇文章)成功存储到计算机中
8.我们很容易发现,只要把所有的想要存储的字符都按顺序排列在一张表上,从0开始编号,那么每一个字符就会拥有独特的编号,这时,只要把编号转换成二进制表示,得到的二进制码就是独一无二的。于是,我们决定就按照这种方法把字符转换成二进制码
9.这项转换工作就叫字符编码,得到的二进制码还叫字符编码(也叫字集码)
10.如果不考虑更复杂的因素,我们的转换工作到这里就大体完成了。我们把这张包含了所有字符的表叫作字符集,把最终得到的二进制码叫作字符编码
11.不难发现,在满足不重复的前提下,我们可以用多种多样的方式给表上的字符编号,例如,我们可以从0开始,也可以从10000开始,甚至还可以在编号中使用字母(如U203355),不同的编号方法得到的编号是截然不同的
12.即使编号相同,我们也可以用不同的方法生成不同的二进制码,例如我们可以在编号的二进制表示中按照一定规则插入一些多余的0和1,只要规则合理,我们同样可以保证得到的二进制码仍然是独一无二的
13.实际经验表明,使用不同的方法进行编号、使用不同的方法把编号转换成二进制码并不是无聊的恶作剧,相反,在有些情况下,这甚至是必要的
14.于是,对于同一张表(字符集),我们发明了很多种不一样的从字符到二进制码的转换方法,这些转换方法就叫作字符编码方案(或字符编码方式)。我们给同一个字符集衍生出的不同字符编码方案,甚至是不同字符集的不同编码方案都取了名字,如utf-8、utf-16
15.说到这里,我们可以做个总结:字符集是字符的集合,字符编码方案(式)是字符集的衍生物。字符集的不同在于所包含的字符不同,字符编码方案(式)的不同不仅在于它对应的字符集不同,还在于它所采用的从字符到二进制码的转换方法不同。因此,如果我们仅仅知道字符集的名字,我们不能确定如何把字符转换成二进制码,但如果我们仅仅知道字符编码方案的名字,那我们也就知道了它所对应的字符集的名字以及从字符到二进制码的具体转换方法
16.因此,如果我们把一段二进制码交给计算机,我们还要准确告诉计算机这段二进制码是用什么字符编码方案编码后得到的,这样,计算机才能正确还原出原来的字符
17.举个例子,我们如果要把字母H存储到计算机中,我们应该先用一种字符编码方案(假设是A方案)把字母H转换成二进制码(假设是001100),然后把这段二进制码存储到计算机中。如果你想让计算机把存储进去的字母H显示出来,那么你应该指出存储介质中存储的这段二进制码(001100)是用什么字符编码方案编码的,如果你告诉计算机这是用A方案编码的,那么计算机可以正确还原出字母H并将它显示在屏幕上,但如果你告诉计算机这是用B方案编码的(实际上不是),那么计算机将按照B方案来反向编码(解读)这段二进制码,由于A方案和B方案是不同的,还原出的字符极有可能不是字母H而是别的字符(例如在B方案中,001100是逗号编码后的二进制码,那么计算机将把这段二进制码还原成逗号并在屏幕上显示一个逗号而不是原先的字母H),这就是由于编码方案和解码方案不同而引起的错误
2386

被折叠的 条评论
为什么被折叠?



