ASCII, UNICODE, UTF-8, 字符集理解
字符编码的发展历史
一个字节:最初一个字节的标准是混乱的,出现过4位、6位、7位的一字节标准,最终由于历史原因和物理存储需求(8位是2的3次方,方便物理存储),所以采用了8位为一个字节的标准。
ASCII:定下了8位为一个字节后,那么一个字节可以表示的状态就有256种(2^8),对应0-255号。接下来就需要考虑8位如何表示一个字符了,ASCII码顾名思义(American Standard Code for Information Interchange)就是美国的信息交换标准码,因此只需要表示出英文字母和少数的标点符号以及操作控制符号即可,于是人们把这些需要编码的字符编到了0-127号(包括127),这种编码方式就是ASCII码。后来为了满足更多地区的字符编码的需求,127号之后的位置也被编码了字符,包含了127号之后的ASCII码被称为扩展ASCII码。
所以当前我们可以认为ASCII一共有256个 并不是255个,前128个为常用的字符 如 运算符 字母 数字等 键盘上可以显示的,后 128个为 特殊字符 是键盘上找不到的字符,你在书上看到的 只是它把常用字符列出来了
GB2312等: 但是一个字节最多只能编码256个字符,对于世界上的语言字符来说远远不够,比如中文的汉字就有许许多多,因此中国采用了GB2312、GBK、GB18030等双字节字符集(DBCS)的编码方案,还有各个地区和语言采用了各自的编码方案,编码方案不统一的问题就造成了很大的困扰。GB2312 是对 ASCII 的中文扩展。
Unicode:面对这种困扰的局面,国际标准化组织(ISO)决定来解决这个问题,他们做了一个包含了地球上所有文化、字母、符号的编码方案Unicode,并且统一采用双字节,对于原来的单字节的符号,低位编码不变,扩展其高位为0变为双字节符号,这样就解决了标准与统一的问题。
但是Unicode也有一些问题,一是计算机如何区分编码为Unicode字符还是两个ASCII字符,二是半角符号(就是原来的ASCII方案里的一字节字符)只占用了一个字节的空间,Unicode占用了双倍的空间,对于英文字母等半角字符来说,直接多占用了一倍的空间,这是极大的浪费。因此,Unicode在很长的一段时间内难以推广。
UTF:直到后来UTF(UCS Transfer Format)标准的出现,Unicode才得到更好的使用。UTF是一种字符在网络上的传输方案,专为数据传输而设计,UTF-16就是一次传输16位的数据,UTF-8就是一次传输8位的数据。其中UTF-8是使用最广的一种Unicode的实现方式,它的一大特点就是它是一种变长度的编码方式,当字符在ASCII码范围内是,使用一个字节代表一个字符,字符在别的范围内时,又是另外的长度,比如中文使用三个字节的长度。UTF-8通过一些算法和规则来实现Unicode的转换。
总结:
编码方案最初为ASCII码,且只用了0-127号,后来由于需要使用更多字符的原因,发展为扩展ASCII码,之后由于各个地区和语言的不同,出现了许多编码标准,比如中国的GB2312等。面临这种局面,ISO制定了Unicode来实现编码的统一,由于Unicode的一些缺点,没有得到更大的推广。直到UTF,尤其是UTF-8这些传输方案的出现,Unicode得到了大范围的使用。
最新文章
- C#: DataBase
- 使用Xpath对XML进行模糊查询
- pip使用报错【cannot import name HTTPSHandler】
- 技术揭秘12306改造(一):尖峰日PV值297亿下可每秒出票1032张
- 源自梦想 自定义ViewGroup的整理_1
- 亚马逊左侧导航(jquery.menuaim.js)
- MySQL timestamp用法
- android导航设计
- 通过浏览器直接打开Android应用程序
- 基于visual Studio2013解决面试题之0801对称字符串
- SSD 和 SAS 意外造 raid 1
- Java学习笔记——排序算法之进阶排序(堆排序与分治并归排序)
- 201521123085 《JAVA程序设计》第6周学习总结
- iOS进阶之使用 NSURLProtocol 拦截 HTTP 请求(转载)
- 结对作业收获_core组
- Chrome 75 &; lazy-loading
- day8--socketserver
- Objective-C学习笔记(三)——用Objective-C编写第一个程序:Hello,World!
- Compoxure example 应用说明
- 用VC资源动态链接库解决国际化问题
热门文章
- SQL简单基础(1)
- JvisualVM的使用【转载】
- JavaScript获取距离某天前或后的日期
- 2241. [SDOI2011]打地鼠【暴力+剪枝】
- 【[ZJOI2012]灾难】
- 随手记——数据结构可视化(graphviz)
- ethereumjs/merkle-patricia-tree-1-简介
- Spring(十二)之JDBC框架
- Loading dl-debug.c in gdb / Ubuntu 14.04.4 LTS
- Dubbo实践(五)扩展Spring Schema