字符集与字符编码

168 阅读3分钟

字符编码

什么是字符编码

字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列、8位组或者电脉冲),以便文本计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。

在计算机技术发展的早期,如ASCII(1963年)和EBCDIC(1964年)这样的字符集逐渐成为标准。但这些字符集的局限很快就变得明显,于是人们开发了许多方法来扩展它们。对于支持包括东亚CJK字符家族在内的写作系统的要求能支持更大量的字符,并且需要一种系统而不是临时的方法实现这些字符的编码。

字符编码种类

字符编码有非常多,每个国家都有自己规定的字符编码,在中国常见的字符编码有以下几种: ASCII、 Unicode、UTF-8、GBK(简、繁体字融于一库)、GB2312(简体中文字符集)、BIG5(繁体中文字符集)。

字符在计算机中的表示

  1. 我们都知道计算机内所有数据都是用二进制进行表示的,每个二进制位(bit)有0和1的状态。
  2. 一个字节有8个二进制位,也就是说一个字节有256(2的8次方)种变化,每一个状态对应一个符号,就是256个符号,从0000000到11111111。

ASCII码

  1. 美国根据自己26个字母定制了一套编码,叫ASCII码;一共规定了128个字符的编码
  2. 比如空格”SPACE”是32(二进制00100000)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 英文用ASCII码就够了,那中文呢?中文数量可是比英文多得多,该怎么办呢?所以要兼容ASCIIde的基础上实现自己文字的编码。

Unicode码

世界上有各种各样的编码语言,每个字符表示的编码字符都是不一样的,而Unicode码就是将世界上所有编码语言汇在一起,每个字符所表示的编码代号都是独一无二的。 原本一个英文ASCII码用1个字节就够了,但是Unicode码就需要3个字节或者更多字节,这造成了存储的浪费,这时候UTF8出现了。

UTF8

随着计算机、互联网的普及,整个世界需要一个统一规范而且比较简洁的编码类型,而UT8就是可以根据不同符号变化字节长度的编码。但是它还是隶属于Unicode码的哦~

UTF8和UTF8+BOM

BOM(byte of mark)是一个Unicode中一个特殊字符;表示0长度,非断行的空格。 BOM出现的初衷☞ BOM最初是用来区分UTF-16和UTF-32的;UTF-16编码使用内容“FE FF”的BOM来标记big ending,即高位结束符;用“FF EE”标记 small ending,即低位结束符。在不支持或者未识别UTF-8编码的环境下,该BOM会被解析成乱码,导致问题。