Chen Yangjian's Blog

Carpe diem - Seize the day

Unicode 不是 UTF-\d{1,2}

| Comments

via

\d{1,2} 是一个正则表达式,\d 表示 [0-9],{1,2}表示前缀集合重复1或两次。也就是 UTF-8、UTF-16、UTF-32 之类。作者想说的是:Unicode 不是 UTF-8、UTF-16 之流。

因此,这个标题教育我们,原作者是个彪蹄党。原本想翻译全文,但是天气一热人就容易懒惰,偷懒挑着翻一点。

====以下译文====

这就是错的。Unicode 是一个标准,而 UTF(8|16|32) (译注:这个正则就河蟹多了嘛)则是支持将 Unicode 编码成为字符串的字符编码。UTF-16 能将 Unicode 全部指令编码,但是 UTF-16 不是 Unicode,反之亦然。

一个字符串不能用 Unicode 编码。它就是不能。你能够施咸猪手的要么是已经编码的字符串,要么是 Unicode 数据(一串码点)。但是你不能“用 Unicode 编码”,这是说不通的。同样你不能将一个字符串编码为 Unicode。你就是不能,你可以将一个字符串从它的源编码解码成 Unicode 数据:码点串。

  • 当你将数据从 Unicde 转为一个特定的字符编码集,你是在将 Unicode 码点编码为字符串。这个编码的依据就是你想要的字符编码集的特定的字符编码。
  • 当从字符串转为 Unicode 的时候,你是在解码你的数据:如果不幸没能知晓原先的用来编码给字符串的字符编码,你就解码失败,彻底悲剧了。

====以下是我的废话====

Unicode 是标准,不是实际应用。UTF-xx 是满足该标准的编码规范,是该标准的实现。具体点可以看 Joel on Software 的 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) (每个挨踢从业人员都应该知晓)。

Comments