字符编码的混乱世界 ASCII,GB2312,UNICODE,UTF
2010-04-08 11:35
134 查看
本文没有区分字符集和字符编码的概念,且不是从标准探讨的角度去认识字符编码,只是从程序员的角度去思考这个问题,资料来源要么是据说,要么是路边社,切勿全当真,信者有,不信者无哈。
1.ASCII:
据说最早是由IBM制定的,当年那一帮老爷子估计压根儿没想到哪天全世界的人都会用上计算机,特别
是使用差不多10W文字的中国人,所以人家当时规定只有128个字符也情有可原,鬼知道当年的笨拙的铁疙
瘩现在能流行得全世界都是。ASCII是最基本的编码格式,到现在普遍认同的是只使用0-127的编码标准。
2.DBCS:
当计算机的使用在全球范围内铺开的时候,当地语言的输入和表示就成了一个不可避免的问题,中国人
用电脑还不能输入汉字,这不是欺我华夏无人嘛,于是不知哪位高人钻了ASCII的空子,你ASCII有用的就
前128个符号,后面的都是些可有可无的乱七八糟的火星文,地球人哪里会用,于是乎,大胆的阉割掉
ASCII后128个字符,使用大于128的第一字节和后面的附加字节来表示汉字,机器在解读字符时只要发现
该字节的最高为1则将该字节和后面的一字节联合翻译为一个汉字,这就是GB2312的解决方案。这样的解
决方案也被其它亚洲文字采用:繁体中文,日文,韩文等,这些文字都存在于2个字节的数值范围内,那
0xaa,0xbb到底应该解释为中文文字还是韩文文字还是日文?为了解决这个问题,提出了代码页的概念,
用于指定双字节编码到底应该解释为什么字符,要指定它显示中文,就需要指定定简体中文的代码页
CP936,如果他是代表韩文,就要指定为CP949。
3.UNICODE:
按理说有了DBCS的解决方案,显示各民族的大部分本地化文字应该是没有问题了,但伟大的党教导我们
:没有任何对象是独立存在的,要用联系的观点看问题。当你要和别人发生接触和交流特别是深入敌人内
部时,问题就出现了,假如一个中国留学生在日本留学,为了正常的显示日文,他机器指定了代码页
CP932(日文),如果他某天想看看SINA的新闻,结果SINA全是GB2312的编码,浏览器上一堆乱码,为了正
常显示,他不得不手动指定字符编码为CP936,这样的事情到现在依然大量发生。有没有办法免去其中的
麻烦?于是,UNICODE横空出世,主流的UNICODE16方案将0-65535的数值区间进行分段,分别存储各民族
的文字编码,基本实现世界范围的字符编码统一,在使用UNICODE字符编码时,任何一个在UNICODE中存在
的字符都只有一个唯一编码,在任何情况下都可以正确的识别。UNICODE的出现为国际化编程提供了一种
简洁的方法,但理论和现实往往有许多的差异,理论丰满,现实骨感呐,当
ASCII,ANSI,GB2312,CP932,UNICODE,MBCS,UTF8等一堆名词同时出现在用户面前的时候,有几个不晕乎的
?不过这里不详细阐述这些名词,这需要体会。
4.UTF:
UNICODE解决了文字的国际化支持,是个非常大的进步,UTF的出现,本人觉得并没有多大革命性的意义
,但是,现在它却很流行,特别是在WEB上,为啥?UNICODE每个字符都用2个字节来表示,现在硬盘越来
越大,存储上并没有多大问题,相比于动则上G的视频文件,相信没有哪个家伙还会有多在乎一个文本文
件从1K变大为2K吧,但是,一个莫须有的情况是,互联网初级阶段的基本矛盾是广大网民的带宽需求和广
大的电信运营JS的服务提供能力之间的矛盾。UNICODE一个字符要2个字节,太浪费了,特别是在慢如蜗牛
的internet,简直暴殄天物,不知道有没有这么夸张哈。怎么办?世上无难事,只怕有些人,在一般人瞎
忙活一阵子后,混乱的字符编码世界变得更加惨不忍睹:UTF出世,包括UTF8,UTF16..不过常用也就UTF8,
UTF基于UNICODE编码标准,它要解决的是UNICODE的传输问题,可以理解为UTF-8是UNICODE的再编码,它
将UNICODE中常用的字符用1个字节表示,次常用的用2个字节表示...如此这般的结果就是:在传输英文网
页的时候每个字符基本只需要1个字节,传输中文网页的时候每个字符3个字节,呵呵,万恶的帝国主义。
1.ASCII:
据说最早是由IBM制定的,当年那一帮老爷子估计压根儿没想到哪天全世界的人都会用上计算机,特别
是使用差不多10W文字的中国人,所以人家当时规定只有128个字符也情有可原,鬼知道当年的笨拙的铁疙
瘩现在能流行得全世界都是。ASCII是最基本的编码格式,到现在普遍认同的是只使用0-127的编码标准。
2.DBCS:
当计算机的使用在全球范围内铺开的时候,当地语言的输入和表示就成了一个不可避免的问题,中国人
用电脑还不能输入汉字,这不是欺我华夏无人嘛,于是不知哪位高人钻了ASCII的空子,你ASCII有用的就
前128个符号,后面的都是些可有可无的乱七八糟的火星文,地球人哪里会用,于是乎,大胆的阉割掉
ASCII后128个字符,使用大于128的第一字节和后面的附加字节来表示汉字,机器在解读字符时只要发现
该字节的最高为1则将该字节和后面的一字节联合翻译为一个汉字,这就是GB2312的解决方案。这样的解
决方案也被其它亚洲文字采用:繁体中文,日文,韩文等,这些文字都存在于2个字节的数值范围内,那
0xaa,0xbb到底应该解释为中文文字还是韩文文字还是日文?为了解决这个问题,提出了代码页的概念,
用于指定双字节编码到底应该解释为什么字符,要指定它显示中文,就需要指定定简体中文的代码页
CP936,如果他是代表韩文,就要指定为CP949。
3.UNICODE:
按理说有了DBCS的解决方案,显示各民族的大部分本地化文字应该是没有问题了,但伟大的党教导我们
:没有任何对象是独立存在的,要用联系的观点看问题。当你要和别人发生接触和交流特别是深入敌人内
部时,问题就出现了,假如一个中国留学生在日本留学,为了正常的显示日文,他机器指定了代码页
CP932(日文),如果他某天想看看SINA的新闻,结果SINA全是GB2312的编码,浏览器上一堆乱码,为了正
常显示,他不得不手动指定字符编码为CP936,这样的事情到现在依然大量发生。有没有办法免去其中的
麻烦?于是,UNICODE横空出世,主流的UNICODE16方案将0-65535的数值区间进行分段,分别存储各民族
的文字编码,基本实现世界范围的字符编码统一,在使用UNICODE字符编码时,任何一个在UNICODE中存在
的字符都只有一个唯一编码,在任何情况下都可以正确的识别。UNICODE的出现为国际化编程提供了一种
简洁的方法,但理论和现实往往有许多的差异,理论丰满,现实骨感呐,当
ASCII,ANSI,GB2312,CP932,UNICODE,MBCS,UTF8等一堆名词同时出现在用户面前的时候,有几个不晕乎的
?不过这里不详细阐述这些名词,这需要体会。
4.UTF:
UNICODE解决了文字的国际化支持,是个非常大的进步,UTF的出现,本人觉得并没有多大革命性的意义
,但是,现在它却很流行,特别是在WEB上,为啥?UNICODE每个字符都用2个字节来表示,现在硬盘越来
越大,存储上并没有多大问题,相比于动则上G的视频文件,相信没有哪个家伙还会有多在乎一个文本文
件从1K变大为2K吧,但是,一个莫须有的情况是,互联网初级阶段的基本矛盾是广大网民的带宽需求和广
大的电信运营JS的服务提供能力之间的矛盾。UNICODE一个字符要2个字节,太浪费了,特别是在慢如蜗牛
的internet,简直暴殄天物,不知道有没有这么夸张哈。怎么办?世上无难事,只怕有些人,在一般人瞎
忙活一阵子后,混乱的字符编码世界变得更加惨不忍睹:UTF出世,包括UTF8,UTF16..不过常用也就UTF8,
UTF基于UNICODE编码标准,它要解决的是UNICODE的传输问题,可以理解为UTF-8是UNICODE的再编码,它
将UNICODE中常用的字符用1个字节表示,次常用的用2个字节表示...如此这般的结果就是:在传输英文网
页的时候每个字符基本只需要1个字节,传输中文网页的时候每个字符3个字节,呵呵,万恶的帝国主义。
相关文章推荐
- 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
- 字符编码简介:ASCII,Unicode,UTF-8,GB2312及Unicode和UTF-8如何转化
- 各种字符编码详解(ascii,utf-8,unicode,gbk,gb2312,iso8859-1等)
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?
- 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
- 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
- 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?[转]
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码 及 转换
- [导入]字符编码简介:ASCII,Unicode,UTF-8,GB2312
- 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)
- 字符编码的故事:ASCII,GB2312,Unicode,UTF-8,UTF-16
- 字符编码简介:ASCII,Unicode,UTF-8,GB2312
- ASCII,Unicode,UTF-8,GB2312一些关于字符编码的理解
- 字符编码知识:Unicode、UTF-8、ASCII、GB2312等编码之间是如何转换的?(...
- c#字符编码,System.Text.Encoding类,字符编码大全:如Unicode编码、GB18030、UTF-8,UTF-7,GB2312,ASCII,UTF32,Big5
- 彻底搞清楚字符编码: ASCII, ISO_8859, GB2312,UCS, Unicode, UTF8.(GBK, GB18030, BIG5, UTF-7,UTF-16,UTF-32)
- 字符编码简介(ASCII,ISOXXX,GB2312,GBK,UNICODE,UTF-8)