浅谈计算机编码

为什么有编码?

  编码可以说是每个程序员都绕不开的问题,计算机记录东西都是01串,将我们人可以识别认识的内容转换为计算机可以识别的内容的转换过程就是一种编码。因此无论你在做什么,只要跟计算机有关,即便你简单的敲了下键盘、动了动鼠标等等,计算机都会进行编码操作变成它可以识别内容。

  学过通信的童鞋可能还会知道信源编码、信道编码,这个不在本文讨论的计算机编码之中。

编码的种类有哪些?

  以我们程序员经常接触的编码来讲,我个人认为具体可以分为以下几类:

    1. 数字编码:整数、浮点数等的编码。这块其实就是我们一直会纠结的一个int到底几个字节的问题,float为什么就单精度了,double怎么就双精度了,比较double为啥不能直接用等于等等问题。说白了就是数字如何在计算机中存储,怎么“编码”将人认识的数字(汉字的数字、罗马数字等等不在此列,此处应该只是一个逻辑上的数字)变成计算机的内容。
    2. 字符编码:英文字母、法文字母、汉字等等的编码。往往我们出错或者纠结最多的就是字符编码了。由上面的分析,大家应该都可以看出来字符编码可以理解为将人识别的字符,变成计算机可识别的二进制码。具体怎么变换,下节再分析。
    3. 视频编码:同上所述,也是把视频转化为计算机可识别内容的过程。

  通过以上分析,我们可以看出来,计算机的编码其实可以理解为人(或者其它)可以识别的内容“编码”为计算机可以是别的内容。推而广之的话,可以理解为A可以理解的内容转换为B可以理解的内容的过程就是编码。维基百科上的定义:编码是信息从一种形式或格式转换为另一种形式的过程。

字符编码

  定义还是参考维基百科:字符编码(英语:Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。

  大家可以看到,所谓的字符编码其实就是根据字符集找到相应的编码。用程序员经常做的事情来说,就是有张字典表,查询下就行。所以字符集的设置是一个重要的内容,没有它我们无法实现编码。常见的字符集此处不再赘述,想看具体细节的童鞋请看一下链接。

ASCII:最古老的字符集编码之一了,127个字符

UTF-8:目前最火的编码方式了,可变长。支持字符种类很多。如果你不太懂字符集,就选它吧。

UTF-16:定长编码,UTF-8的来源,不推荐使用。

GBKGB2312:汉字编码集。国标。

特别注意:选择哪个字符集根据实际情况来定,比如编解码效率、编码后内容大小等等。但最关键的是通信的两端要一致!


  每种字符集的具体规则,在本文中就不详细介绍了,有兴趣的可以自行搜索。

posted @ 2014-12-23 21:27  每日懂一点  阅读(1134)  评论(0编辑  收藏  举报