文章来源自知乎问答---知乎-编码解码
简单来说,就是编码解码采用了不同的标准,下面我们来分析下这个问题更深层面的原因。
首先我们的第一个问题是,计算机为什么需要编码?
为什么需要编码?
我们知道计算机处理的数据实际上都是二级制的数据,也就是计算机实际上只识别0和1两种状态。发明计算机的过程中人们需要解决的第一个问题就是文字的处理问题,也就是我们如何将文字符号转化为二级制数据,同时我们也需要能够将转化后的二进制数据重新转化为文字符号供我们阅读。前面的过程我们称之为编码,后面的这个过程我们称之为解码。这和电信领域更著名的一套编解码规则莫尔斯码是一个原理。
ASCII
我们知道,计算机是由美国人发明的,所以最初摆在他们面前的编解码问题其实简单的多,因为英文只有26个字母,即使加上美国人日常使用的所有符号,也不会超过100个。而一个字节8位中前7位的理论上可以表示=128个字符,所以对于英文来说,只需要用一个字节 =256(甚至还富余128个!)来表示,就足够了。于是美国人开心的制定了一套规则:American Standard Code for Information Interchange,美国信息交换标准代码。这个规格有个大名鼎鼎缩写名称:ASCII。
ASCII一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。下图为全部的ASCII编码。
在早期计算机领域,英语作为唯一统治性的语言,ASCII很好的完成了人们所需要的编解码工作。ASCII也就成为计算机世界的标准之一。
字符集&编码方式在继续向下之前,我们需要区分下字符集和编码方式两个概念。
字符集(Charset)是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。
而字符编码(Character Encoding)是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。
具体来说,对于ASCII字