来源:python中国网 时间:2019-09-13

  编码引入

  我们用阿拉伯数字1代表只有一个事物。英国人用字母one代表只有一个事物!我们管老虎叫做老虎,英国人管老虎叫做tiger。描述同样的事物不同的人用了不同的方式。假定英国被你霸占了,你规定one代表老虎,那也无可厚非。老子曰:道可道,非常道。名可名,非常名。事物就在那里,变的是表示他的方法。这些方法可以看成编码。

  编码概念

  编码是信息从一种形式或格式转换为另一种形式的过程。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。解码,是编码的逆过程。

  计算机中的编码

  计算机底层硬件表示出来的信息只有无电压和有电压两种状态,我们用数字0和1表示,用一串0和1进行组合来表示不同的信息。为了便于交流,人们就制定了一套规则,规定用固定长度,不同组合来表示数字和文字,从而形成最早的ASCII(AmericanStandardCodeforInformationInterchange,美国信息交换标准代码)编码方案。

  而随着计算机的普及,由于每个国家都有自己的字符,中国文字、日文、韩文等等都需要用计算机显示出来,但是以上编码存在局限性,无其他国家字符的对应关系。陆陆续续发展了一堆编码。

  ASCII占1个字节,只支持英文

  GB2312占2个字节,支持6700+汉字

  GBKGB2312的升级版,支持21000+汉字

  Shift-JIS日本字符

  ks_c_5601-1987韩国编码

  TIS-620泰国编码

  所以,计算机编码方案经历了从本地化编码到国际化编码的发展,最终形成Unicode的一统天下编码方案,考虑到网络传输的效率,UTF编码方案也应运而生。

  为何有乱码

  乱码也就是不同编码方案混淆使用的结果。存储文字的时候按照一种编码存储,而显示文字的时候按照另一种编码显示!假设在utf-8编码里面4个电压信号算作一个文字编码。0101代表我,1010代表们,那么0101 1010就是我们,我们以utf-8的形式存储完毕。而在GBK里面3个电压信号算一个编码,此时解码按照三个一组来解码,就是010 110 10,而这个序列在GBK里面谁知道是什么玩意,或许根本就木有,当然就是乱码。

  注意点:

  在国内我们用windows电脑,在其cmd这个终端下只能以GBK的形式解码显示字符。所以大家在选择终端的时候要了解他到底是以什么方式显示字符的。一些文本编辑器比如sublime默认是以utf-8打开文件。所以在日常可能会遇见一些奇葩事。这和系统本身及终端本身特性有关。

  此时,你对编码和乱码的原因明白没。