没有合适的资源?快使用搜索试试~ 我知道了~
首页各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解
资源详情
资源评论
资源推荐
各种编码 UNICODE、UTF-
8、ANSI、ASCII、GB2312、GBK 详解
https://blog.csdn.net/zxh2075/article/details/53064160
2016 年 11 月 07 日 10:25:10
阅读数:1216
一、编码历史与区别
一直对字符的各种编码方式懵懵懂懂,什么 ANSI UNICODE UTF-8
GB2312 GBK DBCS UCS……是不是看的很晕,假如您细细的阅读本文你一
定可以清晰的理解他们。Let's go!
很久很久以前,有一群人,他们决定用 8 个可以开合的晶体管来组合成不
同的状态,以表示世界上的万物。他们看到 8 个开关状态是好的,于是他们把
这称为"字节"。
再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用
字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们
就这机器称为"计算机"。
开始计算机只在美国用。八位的字节一共可以组合出 256(2 的 8 次方)种
不同的状态。
他们把其中的编号从 0 开始的 32 种状态分别规定了特殊的用途,一但终
端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上
00x10, 终端就换行,遇上 0x07, 终端就向人们嘟嘟叫,例好遇上 0x1b, 打印
机就打印反白的字,或者终端就用彩色显示字母。他们看到这样很好,于是就
把这些 0x20 以下的字节状态称为"控制码"。
他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状
态表示,一直编到了第 127 号,这样计算机就可以用不同字节来存储英语的文
字 了 。大 家看 到这 样 ,都 感觉 很好 , 于是 大家 都把 这个方 案叫 做 ANSI
的 "Ascii" 编 码 ( American Standard Code for Information
Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样
的 ASCII 方案来保存英文文字。
后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多
国家用的不是英文,他们的字母里有许多是 ASCII 里没有的,为了可以在计算
机保存他们的文字,他们决定采用 127 号之后的空位来表示这些新的字母、符
号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序
号编到了最后一个状态 255。从 128 到 255 这一页的字符集被称"扩展字符
集"。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想
到还有第三世界国家的人们也希望可以用到计算机吧!
等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况
且有 6000 多个常用汉字需要保存呢。但是这难不倒智慧的中国人民,我们不
客气地把那些 127 号之后的奇异符号们直接取消掉, 规定:一个小于 127 的字
符的意义与原来相同,但两个大于 127 的字符连在一起时,就表示一个汉字,
前面的一个字节(他称之为高字节)从 0xA1 用到 0xF7,后面一个字节(低字
节)从 0xA1 到 0xFE,这样我们就可以组合出大约 7000 多个简体汉字了。在
这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,
连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,
这就是常说的"全角"字符,而原来在 127 号以下的那些就叫"半角"字符了。
中 国 人 民 看 到 这 样 很 不 错 , 于 是 就 把 这 种 汉 字 方 案 叫 做
"GB2312"。GB2312 是对 ASCII 的中文扩展。
但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这
里打出来,特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把
GB2312 没有用到的码位找出来老实不客气地用上。
后来还是不够用,于是干脆不再要求低字节一定是 127 号之后的内码,只
要第一个字节是大于 127 就固定表示这是一个汉字的开始,不管后面跟的是不
是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准,GBK 包
括了 GB2312 的所有内容,同时又增加了近 20000 个新的汉字(包括繁体
字)和符号。
后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民
族的字,GBK 扩成了 GB18030。从此之后,中华民族的文化就可以在计算机
时代中传承了。
中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做
"DBCS"(Double Byte Charecter Set 双字节字符集)。在 DBCS 系列标准
里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编
码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个
字节的值,如果这个值是大于 127 的,那么就认为一个双字节字符集里的字符
出现了。那时候凡是受过加持,会编程的计算机僧侣们都要每天念下面这个咒
语数百遍:
"一个汉字算两个英文字符!一个汉字算两个英文字符……"
因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间
谁也不懂谁的编码,谁也不支持别人的编码,连大陆和台湾这样只相隔了 150
海里,使用着同一种语言的兄弟地区,也分别采用了不同的 DBCS 编码方案—
—当时的中国人想让电脑显示汉字,就必须装上一个"汉字系统",专门用来处
理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序就必
须加装另一套支持 BIG5 编码的什么"倚天汉字系统"才可以用,装错了字符系
统,显示就会乱了套!这怎么办?而且世界民族之林中还有那些一时用不上电
脑的穷苦人民,他们的文字又怎么办?
真是计算机的巴比伦塔命题啊!
正在这时,大天使加百列及时出现了——一个叫 ISO (国际标谁化组织)
的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区
性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他
们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS,
俗称 "UNICODE"。
UNICODE 开始制订时,计算机的存储器容量极大地发展了,空间再也不
成为问题了。于是 ISO 就直接规定必须用两个字节,也就是 16 位来统一表示
所有的字符,对于 ascii 里的那些“半角”字符,UNICODE 包持其原编码不变,
只是将其长度由原来的 8 位扩展为 16 位,而其他文化和语言的字符则全部重
新统一编码。由于"半角"英文符号只需要用到低 8 位,所以其高 8 位永远是
0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。
这时候,从旧社会里走过来的程序员开始发现一个奇怪的现象:他们的
strlen 函数靠不住了,一个汉字不再是相当于两个字符了,而是一个!是的,
从 UNICODE 开始,无论是半角的英文字母,还是全角的汉字,它们都是统一
的"一个字符"!同时,也都是统一的"两个字节",请注意"字符"和"字节"两个
术语的不同,“字节”是一个 8 位的物理存贮单元,而“字符”则是一个文化相关的
符号。在 UNICODE 中,一个字符就是两个字节。一个汉字算两个英文字符的
时代已经快过去了。
从前多种字符集存在时,那些做多语言软件的公司遇上过很大麻烦,他们
为了在不同的国家销售同一套软件,就不得不在区域化软件时也加持那个双字
节字符集咒语,不仅要处处小心不要搞错,还要把软件中的文字在不同的字符
集中转来转去。UNICODE 对于他们来说是一个很好的一揽子解决方案,于是
从 Windows NT 开始,MS 趁机把它们的操作系统改了一遍,把所有的核心代
码都改成了用 UNICODE 方式工作的版本,从这时开始,WINDOWS 系统终
于无需要加装各种本土语言系统,就可以显示全世界上所有文化的字符了。
剩余20页未读,继续阅读
xc555
- 粉丝: 8
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0