编码史记_其它综合

字符编码的故事
字符是什么
字符是什么?就是有意义的图形,比如a,中等。在不同的国家代表不同的意思。

但是在计算机世界中只有0和1,好了,如何用0和1将这些字符表示出来呢?这就是编码存在的意义。

编码一点也不高深,就是一个计算机的01和字符ab的简单映射。

于是故事开始了...
很久很久以前,计算机世界只有美国人。美国人的文字造诣很低的,他们的所有文字就只有24个字母,甚至加上大写和小写,阿拉伯数字,计算机中的控制符(回车啥的)都不超过256个(只有127个)。于是,对于他们来说,很自然,那么计算机中用8位就可以表示他们的所有字符了吧。于是他们将8位称作一个字节,计算机的8位表示的每个数字对应了一个英文字符,画了一张表(ASCII码表)。最早的编码AscII码出现了。

欧洲人出场了。欧洲是有好多个国家的,他们的每个国家也都有自己的文字,比如拉丁文,希腊文等。怎么办呢?于是想到,你美国人指定的ASCII码表里面不是只有127个字符吗,后面128-255的字符不是说待定吗,好吧,我们就不客气了。于是欧洲人就将各种奇怪的语言塞入127后面的字符中,形成了一系列的ISO 8859字符集。比如希腊文塞入ASCII,就形成了ISO/IEC 8859-7,西欧语种塞入ASCII就形成了ISO/IEC 8859-1,ISO/IEC 8859-1也叫做latin-1。(对,就是mysql里面经常见到的编码)

下面是ISO 8859现有的15个字符集

ISO/IEC 8859-1 (Latin-1) - 西欧语言
ISO/IEC 8859-2 (Latin-2) - 中欧语言
ISO/IEC 8859-3 (Latin-3) - 南欧语言。世界语也可用此字符集显示。
ISO/IEC 8859-4 (Latin-4) - 北欧语言
ISO/IEC 8859-5 (Cyrillic) - 斯拉夫语言
ISO/IEC 8859-6 (Arabic) - 阿拉伯语
ISO/IEC 8859-7 (Greek) - 希腊语
ISO/IEC 8859-8 (Hebrew) - 希伯来语(视觉顺序)
ISO 8859-8-I - 希伯来语(逻辑顺序)
ISO/IEC 8859-9(Latin-5 或 Turkish)- 它把Latin-1的冰岛语字母换走,加入土耳其语字母。
ISO/IEC 8859-10(Latin-6 或 Nordic)- 北日耳曼语支,用来代替Latin-4。
ISO/IEC 8859-11 (Thai) - 泰语,从泰国的 TIS620 标准字集演化而来。
ISO/IEC 8859-13(Latin-7 或 Baltic Rim)- 波罗的语族
ISO/IEC 8859-14(Latin-8 或 Celtic)- 凯尔特语族
ISO/IEC 8859-15 (Latin-9) - 西欧语言,加入Latin-1欠缺的芬兰语字母和大写法语重音字母,以及欧元(?)符号。
ISO/IEC 8859-16 (Latin-10) - 东南欧语言。主要供罗马尼亚语使用,并加入欧元符号。

接着伟大的中国人也开始使用上电脑了。中文可不得了,文字博大精深,字符远远超过了256个。所以我们无法使用ASCII的扩展了。怎么办呢? 1981年的时候,国家派一批人来做了这个事情,他们统计出所有的中文大概有6000多个字符(后来证明这些人的水品也是有限,好多字符都没有搜出来,于是就有了多种的中文编码),用两个字节(16bit)来表示,16bit能表示的是65536个字符,太够了。我们将16bit分为前8bit和后8bit
如果前8bit小于127(英文ASCII),那么这个8bit就是表示英文
如果前8bit大于127,那么这8bit和后面的8bit合起来表示一个中文
GB是啥意思?国标。

好了,后来某些领导发现,他的名字没法编码了,这个问题出来了。6000个汉字还不足以囊括所有中文,国家在1995年又组织了一批人,继续搜罗一些生僻字,一共搜集出了21886个汉字和字符,形成了GBK编码,GBK编码向下兼容GB2312。

K是啥意思?扩展。

再后来发现了,一些满文,蒙古文啥的少数名族的语言没有编辑到GBK中,继续编辑收录,形成了GB18030编码。

中国台湾的人民当然不能使用大陆编辑使用的GBXX系列编码了,于是他们自己搞了一套BIG5中文编码,收录了13060个汉字和字符。但是这里要注意,BIG5的编码映射表和GBXX系列的就完全不一样了,比如同一个“中”字,在BIG5和GB2312中就是两个完全不同的字节。这里就会有乱码出现了,比如("陶喆"和"陶吉吉"),各种简体中文和繁体文的转码工具就出现了。
BIG5是什么意思?
五种中文套装软体:文书处理,资料库,试算表,通讯,绘图。大致的意思是这套编码主要使用于这5个领域

各个国家使用各个国家自己的编码有没有很繁琐?于是大家很期盼有一种统一的编码形式出现。Unicode编码出现了。Unicode使用的通用的字符集叫做UCS。这个字符集就是一个大的字符空间,每个语种都在这个字符空间内划分一段领域。现在应用的UCS是UCS-2,意思就是不管是英文中文,统一使用两个字节(16bit)来进行字符分配。UCS-2字符集可以表示216(即65536)个字符。已经基本满足世界上所有语言了。如果不够怎么办?已经有预定方案UCS-4(用4个字节表示一个字符)。

切记:UTFXX是Unicode的具体实现方式。
UTF-16是Unicode最基本的实现。Unicode使用16bit表示一个字符,UTF-16就是直接将字符集的映射搬过来而已。

本来这样就已经很美好了,但是美国人又不干了。凭什么每个英语字符要占用2个字节?凭什么占用了我们的带宽和CPU?于是一帮英语体系的外国人讨论出了UTF-8这种字符编码。
UTF-8这种编码是怎么回事呢?
英文字符,和ASCII码一样,占用一个字节
其他语种,每种语种分配一个模板,这个模板有16bit,24bit,甚至还有32bit的。各个语种根据这个模板,将自己的语言转化成模板要求的编码(UTF-8)

这里演示一个中文字“汉”
比如中文分到的模板是1110xxxx 10yyyyyy 10zzzzzz
汉字的Unicode编码是0x6C49,二进制是0110 1100 0100 1001
将这个二进制按照模板的x,y,z顺序插入
得到11100110 10110001 10001001 就是E6 B1 89

好了…大家看出这个对中文有什么不好的吗?原先一个中文使用UTF-16只需要两个字节,但是使用UTF-8却需要3个字节,如果一个网页有1w个中文字,那么我们就需要多传输1w个字节,带宽啊!! 现在就明白了,为什么国内一些网站,比如sina,它的编码规则是使用GBK了吧!

下面再说一下很多编辑器的自动编码匹配的问题。编辑器会检查出你输入的字符是UTF-8还是GBK,基本根据的就是这个UTF-8模板,如果符合模板,就会判断是UTF-8。很多文章说的txt中输入“联通”存为GBK编码再打开会出现乱码就是这个原因导致的。
具体请看这篇文章

还有一种ANSI是什么呢?windows内核是使用UTF-16编写的,但是页面上展示的语言是根据系统设置的“语言”来展示的。ANSI就是windows系统根据你设置的语言环境而进行自动变化的一种编码。比如在中文windows系统下,ANSI就代表GBK编码,日文操作系统下就代表JIS编码。

参考资料

字符编码详解及由来
字符集和字符编码

时间: 2024-09-28 02:40:16

编码史记_其它综合的相关文章

编码史记

昨天听了一个同事的编码讲座,很精彩.想起了要写这个文章分享一下各种编码是如何产生的. 字符编码的故事 字符是什么 字符是什么?就是有意义的图形,比如a,中等.在不同的国家代表不同的意思. 但是在计算机世界中只有0和1,好了,如何用0和1将这些字符表示出来呢?这就是编码存在的意义. 编码一点也不高深,就是一个计算机的01和字符ab的简单映射. 于是故事开始了... 很久很久以前,计算机世界只有美国人.美国人的文字造诣很低的,他们的所有文字就只有26个字母,甚至加上大写和小写,阿拉伯数字,计算机中的

Unicode编码大揭秘_其它综合

如果你是一个生活在2003年的程序员,却不了解字符.字符集.编码和Unicode这些基础知识.那你可要小心了,要是被我抓到你,我会让你在潜水艇里剥六个月洋葱来惩罚你. 这个邪恶的恐吓是Joel Spolsky在十年前首次发出的.不幸的是,很多人认为他只是在开玩笑,因此,现在仍有许多人不能完全理解Unicode,以及Unicode.UTF-8.UTF-16之间的区别.这就是我写这篇文章的原因. 言归正传,设想在一个晴朗的下午,你收到一封电子邮件,它来自一个你高中之后就失去联系的朋友,并带有一个tx

Quoted-printable 编码介绍、Quoted-printable编码解码转换方法_其它综合

Quoted-printable 可译为"可打印字符引用编码"."使用可打印字符的编码",我们收邮件,查看信件原始信息,经常会看到这种类型的编码! 最多时候,我们在邮件头里面能够看到这样的编码!Content-Transfer-Encoding:quoted-printable 它是多用途互联网邮件扩展(MIME) 一种实现方式.其中MIME是一个互联网标准,它扩展了电子邮件标准,致力于使其能够支持非ASCII字符.二进制格式附件等多种格式的邮件消息.目前http协

《Linux内核修炼之道》——第1章 初识Linux 1.1 Linux史记

第1章 初识Linux Linux内核修炼之道 我一直都认为自己是个很冷静.很理智的人,但是在过去的某年某月,我初识了Linux,并为之着迷,至今仍深陷其中,找不到出去的路. 如果你尚未与Linux亲密接触过,那么希望本书可以成为你初识Linux的见证.如果你已经是个Linux达人,那么就选个安静的早晨或下午,陪我一起缅怀下这过去的18年吧. 1.1 Linux史记 Linux内核修炼之道 至此落笔之际,恰至Linux问世18周年,18年的成长,风雨颇多,感慨颇多,谨以这18年来的点滴之事为Li

《互联史记》之:易管天下拼“三国”

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 易管天下拼"三国" 作者:高学海 首发:(www.gaoxuehai.cn)学海天下 易管者,何人也? 据<互联史记>记载,易管者,乃易管天下,站长也.其名如其站,其站如其人,其人如其名. 五岁入学,十五嗜文,二十触网. 粤深之地,互联猛于虎,自强不息者,方能生存.且有腾之讯,迅之雷. 仿古创今者,易管天下,诞

搜索引擎写丹青--看2008年百度“史记”

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   文/梦里秦淮 12月22日,百度发布了2008年度热榜.一年来中国网民关注过的一个个词汇,让人看到互联网正在以崭新的方式记载着人类的历史! 这部百度史册具有如下的特点: 一.民生民意铸就的历史. 当前,碎片化的社区无法清晰.精准地描述历史的整体脉络,而搜索引擎因内容的聚合与海量级数据,更好的勾勒出2008年中国的新型"史记".搜索引擎是史记的

水友分享DOTA史记海涛本纪 调侃涛哥

[科技讯]12月13日消息,DOTA在中国能有当下这般火爆,离不开一位DOTA解说,Esports海涛.海涛推出的系列DOTA视频--海涛教你打DOTA,成为许多DOTA新手玩家的启蒙教学视频,虽然自己不是专业玩家出身,但是凭借对DOTA的热爱,以及坚持不懈的努力,海涛系列视频在DOTA玩家群体中享有很高的赞誉. 对于新手玩家来说,需要的并不是多么飘逸的操作,多么强的大局观,一局游戏能超几次神,完成几次暴走,他们需要的往往就是一个英雄最开始怎么加点,怎么出装备,怎么定位这样初级的DOTA知识,海

UUencode 编码,UU编码介绍、UUencode编码转换原理与算法_其它综合

UUencode编码起先用在unix网络中,先是Unix系统下将二进制的资料借由uucp邮件系统传输的一个编码程式,也是一种二进制到文字的编码.不属于MIME编码中一员.它也是定义了用可打印字符表示二进制文字一种方法,并不是一种新的编码集合.主要解决,二进制字符在传输.存储中问题.它早期在电子邮件中使用较多,最近这些年来基本上被MIME 中Base64所取代了.E-mail中一般采用UU.MIME.BINHEX三种编码标准! 我想,了解下这种编码将二进制字符转换为可打印字符实现思路!对我们以后做

unicode utf-8 gb18030 gb2312 gbk各种编码对比_其它综合

但是我这个的特点是追究原理,我在乎的事情都想弄明白,于是各个qq群依次发信息,没人理会.唉,郁闷.只好自己google it and teach myself .下面是详细介绍. 还有对各方求助没有人理会,我有些个人想法.现在的人已经很少有人去深究理论了,人们的观念是得过且过,人们通常只是知道什么,不知道为什么.对编程来说,个人认为这是很悲哀的事情,也是非常危险的事情.我想可能这也是中国的IT落后于美国的原因,我希望中国的编程人员能够好好想想了. 下面的东西是从网上查到的  Unicode 的编