许多时候,字符集与编码这两个概念常被混为一谈,但两者是有差别的,作为深入理解的第一步,首先要明确: 字符集与字符集编码是两个不同层面的概念
与接口及接口实现的对比可以把这两者与接口及接口实现做个对比: 从这里可以很清楚地看到,
具体例子及规范用法可以简单看两个例子,一个自于html文件,用的是charset: 另一个来自于xml文件,用的是encoding:哪一种用法更规范呢?显然是后者,它更加准确地区分了字符集与编码的概念。 为什么要严格区分字符集与编码这两个概念?字符集与编码一对一的情形
为什么一对一是一种普遍的情况呢?
字符集与编码一对多的情形
为什么Unicode这么特殊?人们弄出新的字符集标准,驱动力无外乎是旧的字符集里的字符不够用了。 Unicode的目标是统一所有的字符集,囊括所有的字符,所以字符集发展到它这里就到头了,再去整什么新的字符集就没必要也不应该了。 但如果觉得它现有的编码方案不太好呢?在不能弄出新的字符集情况下,只能在编码方面做文章了,于是就有了多个实现,这样一来传统的一一对应关系就打破了。 我们严格地区分字符集与编码两个概念,理由就在这里。
Unicode早期与现在的对比让我们来看一个图,它展现了Unicode早期与现在的一些差别:
下面是“记事本程序”保存时的一个截图,是Unicode的一个不规范使用,这里的Unicode就是指UTF-16: 我们现在说了不少Unicode,但我们还没有准确地定义这个词,我们可能有些疑问,如: Unicode是不是就是指Unicode字符集呢? Unicode编码是不是就是指UTF-8,UTF-16,UTF-32这些东西呢? 这些问题没办法简单用是和否回答,在第二篇里会做进一步探讨。 |
|