由于“字符编码”这个话题牵涉到的历史久远、机构众多、专业术语较多,所以本篇文章可能会略长,为了避免内容过于枯燥,我会尽量用一种通俗易懂的语言来写这篇文章。
其中本文的第一篇章会对历史中的主要字符编码进行介绍,由于篇幅较长,如果读者对此已很了解,可直接跳过进行第二章的阅读。
完成本篇文章的过程中参考和阅读了大量的文章和文献,写本篇文章的目的一是让自己对“字符编码”能够做一个较深的理解,二是希望给曾经徘徊或正在徘徊在编码困惑中的前端们一个很好的参考,搞清楚字符编码问题是前端万事之基石。
由于本人才疏学浅,好多信息也是从网络和书籍中参考而来,错误之处难免,请大家指正
ASCII
8个晶体管的“通”或“断”即可以代表一个字节,刚开始,计算机只在美国使用,所有的信息在计算机最底层都是以二进制(“0”或“1”两种不同的状态)的方式存储,而8位的字节一共可以组合出256(2的8次方)种状态,即256个字符,这对于当时的美国已经是足够的了,他们尝试把一些终端的动作、字母、数字和符号用8位(bit)来组合:
0000 0000 ~ 0001 1111 共 33 种状态用来表示终端的特殊动作,如打印机中的响铃为 0000 0111 ,当打印机遇到 0000 0111 这样的字节传过来时,打印机就开始响铃;
0010 0000 ~ 0010 1111 、 0011 1010~0110 0000 和 0111 1101 ~ 0111 1110 共 33 种状态来表示英式标点符号,如 0011 1111 即代表英式问号“?”;
0011 0000 ~ 0011 1001 共 10 种状态来表示“0~9”10个阿拉伯数字;
0100 0001 ~ 0101 1010 和 0110 0001 ~ 0111 1010共 52种状态来表示大小写英文字母;
自此,一共只用到了128种状态,即128个字符,刚好占用了一个字节中的后7位,共包括33个控制字符和95个可显示字符,这一字符集被称为ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),这一套字符集在1967年被正式公布。
讲到这里,引出几个基础概念:
比特(bit):也可称为“位”,是计算机信息中的最小单位,是 binary digit(二进制数位) 的 缩写,指二进制中的一位
字节(Byte):计算机中信息计量的一种单位,一个位就代表“0”或“1”,每8个位(bit)组成一个字节(Byte)
字符(Character):文字与符号的总称,可以是各个国家的文字、标点符号、图形符号、数字等
字符集(Character Set):是多个字符的集合
编码(Encoding): 信息从一种形式或格式转换为另一种形式的过程
解码(decoding): 编码的逆过程
字符编码(Character Encoding): 按照何种规则存储字符
现在我们来看我们文章开头提到的第一条电报的诞生,莫尔斯编码中包含了大小写英文字母和数字等符号。
这里的每一个符号其实就是⌈字符⌋,
而这所有的字符的集合就叫做⌈字符集⌋,
“点”或“划”与字..符之间的对应关系即可以称为⌈字符编码⌋。
而电报的原理是:
“点”对应于短的电脉冲信号,“划”对应于长的电脉冲信号,这些信号传到对方,接收机把短的电脉冲信号翻译成“点”,把长的电脉冲信号转换成“划”,译码员根据这些点划组合就可以译成英文字母,从而完成了通信任务。
这里把字符表示为“点”或“划”并对应为建设好电脉冲信号的过程既是⌈编码⌋,
而译码员把接收机接收到的脉冲信号转化成点划后译成字符的过程即为⌈解码⌋。
而对于计算机诞生之后,只不过是将摩斯电码中的“点”和“划”换成了以8位字节二进制流的方式表示,如数字1的二进制流是0011 0001,对应的十进制流是49,十六进制流是31
其中本文的第一篇章会对历史中的主要字符编码进行介绍,由于篇幅较长,如果读者对此已很了解,可直接跳过进行第二章的阅读。
完成本篇文章的过程中参考和阅读了大量的文章和文献,写本篇文章的目的一是让自己对“字符编码”能够做一个较深的理解,二是希望给曾经徘徊或正在徘徊在编码困惑中的前端们一个很好的参考,搞清楚字符编码问题是前端万事之基石。
由于本人才疏学浅,好多信息也是从网络和书籍中参考而来,错误之处难免,请大家指正
ASCII
8个晶体管的“通”或“断”即可以代表一个字节,刚开始,计算机只在美国使用,所有的信息在计算机最底层都是以二进制(“0”或“1”两种不同的状态)的方式存储,而8位的字节一共可以组合出256(2的8次方)种状态,即256个字符,这对于当时的美国已经是足够的了,他们尝试把一些终端的动作、字母、数字和符号用8位(bit)来组合:
0000 0000 ~ 0001 1111 共 33 种状态用来表示终端的特殊动作,如打印机中的响铃为 0000 0111 ,当打印机遇到 0000 0111 这样的字节传过来时,打印机就开始响铃;
0010 0000 ~ 0010 1111 、 0011 1010~0110 0000 和 0111 1101 ~ 0111 1110 共 33 种状态来表示英式标点符号,如 0011 1111 即代表英式问号“?”;
0011 0000 ~ 0011 1001 共 10 种状态来表示“0~9”10个阿拉伯数字;
0100 0001 ~ 0101 1010 和 0110 0001 ~ 0111 1010共 52种状态来表示大小写英文字母;
自此,一共只用到了128种状态,即128个字符,刚好占用了一个字节中的后7位,共包括33个控制字符和95个可显示字符,这一字符集被称为ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),这一套字符集在1967年被正式公布。
讲到这里,引出几个基础概念:
比特(bit):也可称为“位”,是计算机信息中的最小单位,是 binary digit(二进制数位) 的 缩写,指二进制中的一位
字节(Byte):计算机中信息计量的一种单位,一个位就代表“0”或“1”,每8个位(bit)组成一个字节(Byte)
字符(Character):文字与符号的总称,可以是各个国家的文字、标点符号、图形符号、数字等
字符集(Character Set):是多个字符的集合
编码(Encoding): 信息从一种形式或格式转换为另一种形式的过程
解码(decoding): 编码的逆过程
字符编码(Character Encoding): 按照何种规则存储字符
现在我们来看我们文章开头提到的第一条电报的诞生,莫尔斯编码中包含了大小写英文字母和数字等符号。
这里的每一个符号其实就是⌈字符⌋,
而这所有的字符的集合就叫做⌈字符集⌋,
“点”或“划”与字..符之间的对应关系即可以称为⌈字符编码⌋。
而电报的原理是:
“点”对应于短的电脉冲信号,“划”对应于长的电脉冲信号,这些信号传到对方,接收机把短的电脉冲信号翻译成“点”,把长的电脉冲信号转换成“划”,译码员根据这些点划组合就可以译成英文字母,从而完成了通信任务。
这里把字符表示为“点”或“划”并对应为建设好电脉冲信号的过程既是⌈编码⌋,
而译码员把接收机接收到的脉冲信号转化成点划后译成字符的过程即为⌈解码⌋。
而对于计算机诞生之后,只不过是将摩斯电码中的“点”和“划”换成了以8位字节二进制流的方式表示,如数字1的二进制流是0011 0001,对应的十进制流是49,十六进制流是31