我们知道, 计算机只能存储 0 或者 1, 对于英文字母或者汉字来讲, 我们是无法将其直接存储在计算机中的, 需要给这些字符编码, 编码由 0 和 1 组成, 这样就可以存储在计算机中了. 随着计算机的发展, 世界上出现了各种不同的编码, 这篇文章将对 ASCII 码, GB2312,Unicode,UTF-8 进行探讨.
1,ASCII 码
计算机最初是在美国发展起来的, 美国使用英语, 英语共有 26 个字母, 于是美国人就是用 1 个字节对这 26 个字母进行编码, 如将字符'A'编码为 01100001. 一个字节为 8 位, 总共可以有 256 个编码, ASCII 吗只使用了这 8 为中的低 7 位, 并将最高位置 0, 这样可以产生 128 个字符编码, 除去英文字母所用的 26 个编码, 还包含了一些符号的编码, 如将 % 编码为 01000101, 以及一些控制字符的的编码, 如将换行 (LF) 编码为 00001010. 这样的一套编码被称为 ASCII 码, 全称为 American Standard Code for Information Interchange, 即美国信息交换标准代码.
2,GB2312
计算机传入中国后, 人们发现一个字节的编码已经全部被占用 (最高位为 0 的 128 个为 ASCII 码, 最高位为 1 的 128 个为其他西方国家语言的编码), 而且一个字节的也不可能将所有汉字编码, 于是我们做了一个规定: 一个小于 127 的字符的意义与原来相同, 但两个大于 127 的字符连在一起时, 就表示一个汉字, 前面的一个字节(称之为高字节) 从 0xA1 用到 0xF7, 后面一个字节 (低字节) 从 0xA1 到 0xFE, 这样我们就可以组合出大约 7000 多个简体汉字了. 在这些编码里, 我们还把数学符号, 罗马希腊的字母, 日文的假名们都编进去了, 连在 ASCII 里本来就有的数字, 标点, 字母都统统重新编了两个字节长的编码, 这就是常说的 "全角" 字符, 而原来在 127 号以下的那些就叫 "半角" 字符了. 中国人民看到这样很不错, 于是就把这种汉字方案叫做 "GB2312".GB2312 是对 ASCII 的中文扩展. 结果后来发现 GB2312 所编码的汉字还是不够用, 于是又在 GB2312 的基础上发展出了 GBK 编码.
3,Unicode
当各个国家或地区都搞出自己的一套编码的时候, 结果就会发生我在一台机器上的文本放到另一台采用不同编码的机器上文本内容会变乱码的情况. 比如我用简体中文 (使用 GB2312 编码) 写了一份邮件发送到香港, 而香港使用繁体中文(使用 Big5 编码), 这时邮件中就会出现乱码现象. 为了解决类似的问题, 国际标准化组织 ISO 提出了一套包含全球所有文字, 所有符号的编码, 每个文字或符号的编码独一无二, 他们称这套编码为 Universal Multiple-Octet Coded Character Set", 简称 UCS, 俗称"unicode".Unicode 又被称为 统一码, 万国码, 单一码, 它是为了解决传统的字符编码方案的局限性而产生的, 它为每种语言中的每个字符设定了统一并且为之一的二进制编码. Unicode 编码最少占用 2 个字节, 对于 ASCII 码中的编码保持不变, 只是在高位增加一个全为 0 的字节.
需要注意的是, Unicode 只是一个符号集, 它只规定了符号的二进制代码, 却没有规定这个二进制代码应该如何存储.
4,UTF-8
Unicode 虽然解决了乱码的问题, 但又带来了新的问题: 存储空间上升. 假如有一个全是英文字符的文件, 那使用 Unicode 编码的该文件比使用 ASCII 码编码的该文件体积增加一倍, 另一个问题是无法区分 Unicode 与 ASCII 码, 计算机怎么知道 2 个字节是一个符号而不是两个符号呢. 这时 UTF-8 应运而生, UTF-8 并不规定每个字符至少占用两个字节, 而是使用如下方法编码:
1)对于单字节的符号, 字节的第一位设为 0, 后面 7 位为这个符号的 Unicode 码. 因此对于英语字母, UTF-8 编码和 ASCII 码是相同的.
2)对于 n 字节的符号(n> 1), 第一个字节的前 n 位都设为 1, 第 n + 1 位设为 0, 后面字节的前两位一律设为 10. 剩下的没有提及的二进制位, 全部为这个符号的 Unicode 码.
这样就解决了 Unicode 的问题.
- , http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
- , https://www.zhihu.com/question/23374078
- , https://www.cnblogs.com/zhangqigao/p/6496172.html
来源: http://www.bubuko.com/infodetail-2723112.html