字符集与编码(四)--Unicode

摘要: 本文系统介绍了 Unicode 方面的一些重要知识, 如码点, 平面, 代理区, 代理对以及 UTF, 用具体的例子讲解了码点到 UTF-8 及 UTF-16 的转换原理与过程. 文中还顺便鸟瞰了一下 BMP 字符集, 以此获取更加直观的印象.

前面谈到不少的 Unicode, 但一直没有系统地谈及 Unicode 的方方面面, 所以本篇文章专门谈谈 Unicode, 当然了, Unicode 是一个庞大的主题, 这里也是拣些重要的方面谈谈而已, 免不了挂一漏万.

什么是 Unicode?

按 Unicode 官方的说法, Unicode 是 Unicode Standard(Unicode标准)的简写, 所以 Unicode 即是指 Unicode 标准.

按 wiki 的说法, 它是一个计算机工业标准(a computing industry standard).

继续阅读

字符集与编码(三)--定长与变长

摘要: 本文深入探讨了定长与变长两种实现, 阐述了定长到变长演变的一些权衡与取舍, 并把它与CAP理论作了对比. 在最后, 还通过自行实现变长方案的方式来演示变长设计上的一些考虑.

, 首先, 这并不是图片, 这是一个 Unicode 字符, Yin Yang, 即阴阳符, 码点为 U+262F. 如果你的浏览器无法显示, 可以查看这个链接http://www.fileformat.info/info/unicode/char/262f/index.htm. 这与我们要讨论的主题有何关系呢? 下面我会谈到.

继续阅读

字符集与编码(二)--编号 vs 编码

摘要: 编号是字符到最终编码的一个过渡层与抽象层, 起着承上启下的作用, 它与最终编码在形式上也常常很相似, 在 Unicode 中, 码点(code point)扮演的正是编号的角色. 广义而言, 编号其实也是一种编码.

在深入研究 字符集编码, 简称 编码 之前, 我们先引入一个概念: 编号(code), 引入它是为了更好地与 编码(encode) 相区分.

如果你对 Unicode 有深入了解, 你也许已经意识到了 Unicode 中 码点(code point) 扮演的正是 编号 的角色. 类似的还有 GB 系列中所谓的 区位码.

其实叫什么并不重要, 爱咋咋地, 我并不关心. 但乱叫容易叫混了, 比如把 码点 也叫成 Unicode 编码, 这里先把这些归入到 编号 概念. 为区别起见, 用黑色加粗的 编码 特指 字符集编码.

到了后面你甚至会为 字符集编码 的边界在哪而困惑, 为它的准确定义而纠结, 不过到那时你已经属于"难得糊涂"了, 编号 这一概念你也可以把它丢到爪哇国去了.

继续阅读

字符集与编码(一)--charset vs encoding

摘要: charset 与 encoding 的差别在哪? charset=utf-8 与 encoding=utf8 哪种写法更规范? 本文将探讨这两者的联系与区别.

许多时候, 字符集与编码这两个概念常被混为一谈, 但两者是有差别的, 作为深入理解的第一步, 首先要明确: 字符集字符集编码 是两个不同层面的概念:

  • charset 是 character set 的简写, 即 字符集.
  • encoding 是 charset encoding 的简写, 即 字符集编码, 简称 编码.

继续阅读