[字符集与编码 1] 字符集与编码

一些基本概念

编码

我们都知道,计算机只能识别二进制数字,当你输入字母A时,A会被转换为01000001,这样才能被计算机阅读。这便是编码,即从字符到二进制数字的转换过程

解码

假设硬盘中有一份txt文档,里边含有你前几天编写的一段文字。由于计算机是以二进制数字的形式保存数据的,所以当你打开这份文件,并阅读其中的内容时,计算机便会把二进制数字转换为字符,这便是解码,即从二进制数字到字符的转换过程

字符集

字符集即字符的集合,由于种种原因,历史上出现了很多字符集,常见的字符集包括:

ASCII

ASCII字符集是由美国人发明的,它包含了255个字符,其中常用字符有127个,包括控制符(空格,换行...),英文26个字母的大小写,0到9的阿拉伯数字,以及一些常用符号(逗号,@符号...)。如果你仅需要表示英文和阿拉伯数字,ASCII是非常好的选择。

ISO8859-1

由于ASCII是由老美发明的,他们当初根本没有考虑到还要支持其他国家的语言,因此欧洲人就不爽了,因此欧洲人便发明了ISO8859-1。ISO8859-1不仅包含且兼容了ASCII中的所有字符,还加入了一些西欧字符。这样利用ISO8859-1字符集,便能表示西欧的语言了。(具体支持哪些西欧语言,请自行百度)

GB2312和GBK

由于ASCII与ISO8859-1均只支持欧美国家的字符,因此中国人民不爽了,所以发明了GB2312字符集,该字符集不仅包含且兼容了ASCII的所有字符,加入了大量常用的中文汉字。这样便可以使用GB2312来表示常见的中文字了。

由于GB2312只支持常用中文字,当表示生僻中文字时,GB2312也无能为力。因此便出现了GBK字符集。GBK不仅包含且兼容了GB2312的所有字符,还支持中文里的生僻字。因此如果你需要表示一些中文生僻字,GBK是更好的选择。

Unicode

从上面的情况来看,上述字符集都仅支持特定的自然语言。比如ASCII只支持英文,当遇到西欧语言时便无能为力。GBK只支持中文,当遇到拉丁文时,也是束手无策。因此这个世界迫切需要一种可以表达所有常用自然语言的字符集,因此Unicode字符集应运而生。Unicode支持所有常见自然语言的字符集,因此如果需要支持多国语言,Unicode字符集是最佳选择。

字符集编码

我们经常听到的ASCII, ISO8859-1, GB2312, GBK, UTF-8...这些都是常见的字符集编码(或称为编码规则)。在开头的例子中,便是利用了ASCII编码规则,确定了字母A对应的二进制数字是01000001。

字符集与字符集编码(编码规则)的关系

类比接口与实现类

读到这可能有童鞋已经晕了,或许会问:“为毛你一会儿说ASCII是字符集,一会儿又说ASCII是编码规则,它们到底是什么关系呢?”

要解答这问题并不难,只要类比Java中的接口与实现类的关系就清楚了。在Java中,接口定义了"要做什么事",在实现类中则定义了"该怎么做这件事"。同样的,你可以把字符集当做是Java中的接口,而把编码规则当做是Java中的实现类。因此就变为:ASCII编码规则实现了ASCII字符集。 也就是说,ASCII字符集规定了字符集包含了哪些字符,ASC编码规则说明了计算机应该如何使用二进制数字存储所支持的字符。对于ISO8859-1,GB2312,GBK也是同样的道理。

到这里,大家应该明白,字符集和编码规则在本质上来说是不一样的,或者是因为字符集和编码规则的名称正好相同,才造成了一定的误解吧(或许正是因为这些字符集正好只有一种编码规则实现了它,所以就偷懒,让他们具有同样的名称吧...猜的)。

Unicode的特殊性

上面并没有提到Unicode字符集。原因是:实现了Unicode字符集的编码规则是UTF-8,UTF-16,UTF-32。也就是说,有3种编码规则实现了Unicode字符集(注意,并没有一种叫做Unicode的编码规则!)。也就是说,对于Unicode系列来说,其字符集与编码规则不再是一 一对应的关系,而是一对多的关系!同时,字符集与编码规则也不再是同名的!

为什么会有多种编码规则实现了Unicode字符集呢?主要是因为人们对存储空间的苛刻要求。具体原因详见references中那位大神的博客。

总结

如果你还是没能理解字符集与编码规则的区别与联系(多半是因为我的文笔太差了!_ _), 可以去看下references中的两篇文章,看完以后肯定会有更深的理解。

在下一篇JavaHipster 2中,将重点学习常用的编码规则。

References

http://my.oschina.net/goldenshaw/blog/304493
http://my.oschina.net/goldenshaw/blog/305805

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容