深入图解字符集与字符集编码选编.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入图解字符集与字符集编码选编

深入图解字符集与字符集编码 一、charset vs encoding charset与encoding的差别在哪?charset=utf-8与encoding=utf8哪种写法更规范?本文将探讨这两者的联系与区别。 字符集与字符集编码是两个不同层面的概念 charset是character set的简写,即字符集。 encoding是charset encoding的简写,即字符集编码,简称编码。 可以把这两者与接口及接口实现做个对比: 从这里可以很清楚地看到, 编码是依赖于字符集的,就像代码中的接口实现依赖于接口一样; 一个字符集可以有多个编码实现,就像一个接口可以有多个实现类一样。 可以简单看两个例子,分别来自于html文件与xml文件中,一个用了charset,一个则是encoding: meta http-equiv=content-type content=text/html;charset=utf-8 ?xml version=1.0 encoding=UTF-8? 哪一种用法更规范呢?显然是后者,它更加准确地区分了字符集与编码的概念。 为什么要严格区分字符集与编码这两个概念? 字符集与编码一对一的情形 有很多的字符编码方案,一个字符集只有唯一一个编码实现,两者是一一对应的。比如GB2312,这种情况,无论你怎么去称呼它们,比如“GB2312编码”,“GB2312字符集”,说来说去其实都是一个东西,可能它本身就没有特意去做什么区分,所以无论怎么说都不会错。 为什么一对一是一种普遍的情况呢? 我们以GB2312为例,GB=Guo Biao=国标=国家标准,标准出来本来就为了统一,你一个标准弄出N个编码实现来,你让人家用哪个呢? 字符集与编码一对多的情形 事情到了unicode这里,变得不一样了,唯一的unicode字符集对应了三种编码:UTF-8,UTF-16,UTF-32。如果还是这么笼统地去称呼,就很容易搞混了。 为什么unicode这么特殊? 人们弄出新的字符集标准,驱动力无外乎是旧的字符集里的字符不够用了。 unicode的目标是统一所有的字符集,囊括所有的字符,所以字符集发展到它这里就到头了,再去整什么新的字符集就没必要也不应该了。 但如果觉得它现有的编码方案不太好呢?在不能弄出新的字符集情况下,只能在编码方面做文章了,于是就有了多个实现,这样一来传统的一一对应关系就打破了。 我们严格地区分字符集与编码两个概念,理??就在这里。 指定了编码,它所对应的字符集自然就指定了,编码才是我们最终要关心的。 让我们来看一个图,它展现了unicode早期与现在的一些差别: 注:由于历史方面的原因,你还会在不少地方看到把Unicode和UTF-8混在一块的情况,这种情况下的Unicode通常就是UTF-16或者是更早的UCS-2编码,在后面的篇章中我们会进一步分析。 我们现在说了不少unicode,但我们还没有准确地定义这个词,我们可能有些疑问,如: unicode是不是就是指unicode字符集呢? unicode编码是不是就是指UTF-8,UTF-16,UTF-32这些东西呢? 这些问题没办法简单用是和否回答,在第二篇里会做进一步探讨。 二、字符集及其编号 ?在深入研究字符集编码,简称编码之前,我们先引入一个概念:编号,引入它是为了更好地与编码相区分。如果你对unicode有深入了解,你也许已经意识到了Unicode中码点(code point)扮演的正是编号的角色。类似的还有GB系列中所谓的区位码,有些说法又叫它为汉字内码,也许还有其它叫法。其实叫什么并不重要,爱咋咋地,我并不关心。但乱叫容易叫混了,比如把码点也叫成unicode编码,这里先把这些归入到编号概念。为区别起见,用黑色加粗的编码特指字符集编码。(到了后面你甚至会为字符集编码的边界在哪而困惑,为它的准确定义而纠结,不过到那时你已经属于”难得糊涂“了,编号这一概念你也可以把它丢到爪哇国去了。) 编号是什么? 编号可以看作是字符与编码中间的一个抽象层,过渡层; 广义上说,编号也可看成是某种编码; 狭义上说,编码也可视作为某种编号。 图:字符--编号--编码 编号与编码的主要区别在于编号不涉及具体使用多少字节来表示、是用定长还是变长方案等细节问题。编号仅仅是一个抽象的概念。 在进一步比较编号与编码之前,我们先看看编号是如何来的。 字符集通常是带编号的有序集合 集合(Set,数学意义上):一组不重复的,无序的的元素。 字符集:不重复的,带编号的有序的的字符集合。 图:数学意义上的字符集对比实际的字符集 编号是如何来的? 字符被整理出来之后往往数量众多,通常是置于表格之中。出于统计方面的原因,人们通常用一个数字来编号。表格本身就是一种有序的暗含了编号的形式,哪怕

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档