本周开始学习一些万维网和计算机的基础知识,了解网页的发展和简单了解计算机是如何储存和解释数据的。
正如方方老师所说:
首先你是程序员,然后才是前端
所以,字符和编码是程序员的必修课。
字符与编码的概念
首先,我们了解一下维基百科中关于字符编码的定义:
字符编码(英语:Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。
字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本在计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码和ASCII。
其中,ASCII将字母、数字和其它符号编号,并用7比特的二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。 ——维基百科
简单而言,字符集是一定字符的集合,规定了字符对应二进制数字的表示,以便储存在计算中。
编码则是字符集和实际储存数值之间的转换关系。
编码字符的来由
0和1
计算机作为机器,必须通电才能使用,由于电子器件只有开闭合两种状态,计算机中通过这两种状态可以表示为0和1,于是,0和1这样的二进制表示方式则成为是计算机数据储存的基本表示。
我们可以将计算机想象成一个由众多灯泡组合成的机器,数据则是由这些灯泡的开关组合排列表示而成。
我们知道了,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)都有0和1两种状态,八个二进制位刚好能组合出256种状态,这被称为一个字节(byte),字节则被作为计算机信息计量的基本单位。一个字节可以表示出256种状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。
01和英文的转换——ACSII
由于数字并不能表示为其他语言,为了在计算机中表示出人们需要的信息,数字必须被转换成其他的语言,于是就有了编码需求。1967年,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII编码,一直沿用至今。
ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
收纳更多的字符——Unicode
虽然英语下,128个字符已经能够表达完,但表达其他语言是不够的。比如中文汉字,常用的汉字就超过3500个,于是一些国家和组织就决定自己制定编码的标准。比如,我国有GBK,GB2312等字符集。
但是,问题来了,世界上存在多种编码方式,同一组二进制数字会根据编码的不同被解释成不同的符号,所以当我们打开一个文本时,必须知道它的编码方式,否则可能出现以错误的方式解读得到不正确的内容。不知道大家是否也有同样的经验,小时候打开网页时经常会遇到乱码的情况,这就是解读时的编码方式不正确导致的。
为了解决这个问题,由统一码联盟和国际标准化组织协作制定的通用字符集(Unicode)成为计算机领域重要的字符集,其意图收纳全世界所有的字符。截止2016年6月,已经收纳了超过12万字符。Unicode为每一个字符而非字形定义唯一的代码(即一个整数),以一个抽象的形式(数字)来处理字符,而视觉上的显示,则交给其他软件(浏览器、文字处理器)来处理。
为了更好的储存——UTF-8
未完待续。。