编码

在计算机中,数据的存储和运算都以二进制形式表示。而对于我们常用的语言,如汉字、英语,就需要以一套格式去约定哪些二进制数字表示哪个字符,这种格式就是编码

ASCII编码

最早的编码是ASCII编码,使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。在标准ASCII中,最高位用作奇偶校验

所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

常用的ASCII码有48(0),65(A),97(a)

Latin-1

ISO Latin-1是8比特的字符集,定义了256个字符。前128个字符(00000000-01111111)与ASCII完全一致。

Unicode

ASCII只解决了英文字符的二进制表示问题,其他语言字符没有解决,所以后续推出了其他类型的字符如GB2312、GBK、Unicode等,而且这些字符编码并不会与ASCII编码冲突,0-127依旧是ASCII编码对应的字符。

各国都针对自己的语言推出了独有的语言编码,但同时也出现了问题。举个例子,中文编码GB2312写了一套程序,然后以日文编码ISO-2022-JP打开程序代码就会出现乱码问题,这种情况就是字符编码不同导致的。

为了统一所有文字的编码,Unicode应运而生。Unicode(又称统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等

Unicode 的前 128 个字符(与 ASCII 一一对应)使用一个与 ASCII二进制值相同的八位组进行编码,使有效的 ASCII 文本在进行 UTF-8 编码时也是有效的。

UTF-8,UTF-16

Unicode 可以由不同的字符集实现。最常用的编码是 UTF-8 和 UTF-16:

字符集 描述
UTF-8 UTF8 中的字符可以是 1 到 4 字节长。UTF-8 可以代表 Unicode 标准中的任何字符。UTF-8 向后兼容 ASCII。UTF-8 是电子邮件和网页的首选编码。
UTF-16 16 位 Unicode 转换格式是一种可变长度的 Unicode 字符编码,能够编码整个 Unicode 指令表。UTF-16 主要用于操作系统和环境,如 Microsoft Windows、Java 和 .NET。

参考