ASCII、 Unicode 和 UTF8
- ASCII: 英文字母与数字编号的一一对应。每个英文字母对应一个编号。范围0~127
- Unicode: 全世界所有语言中字符与数字编号的一一对应。也即为存在的每个字符指定一个唯一的编号。范围为0~0x10FFFF。
所以,
ASCII与Unicode是类似的东西,都是为一个字符指定一个唯一的数字编号
只不过Unicode的范围更大,能够表示更多的字符。
在计算机的世界里,只有数字,而不会有什么字符。一个字符在计算机看来就是一个数字。ASCII与Unicode就是将字符与数字一一对应起来的映射。比如对于字符'A',在计算机看来,它就是一个数字65。
当字符串被写入文件时,也是将字符串中每个字符对应的数字编号保存在文件。
以上是ASCII和Unicode的相同点。那么,二者有什么区别?
一个显著的区别是,对于同一段文本,二者保存到文件后占用的字节数不同。对于ASCII,每个数字编号占用一个字节。 而对于Unicode,每个编号则需要占用3个字节。因此对于同一段文本:'abcd',采用ASCII格式保存时,文件的大小为4个字节。 采用Unicode保存时,文件的大小则为12个字节。
由此也可看出,当待保存文本为纯英文字母时,
采用Unicode的存储效率太低了
UTF8便是为了解决Unicode存储效率低下而产生的。具体的规则就不讲了,先来看一下UTF8能够达到的效果。
对于相同的文本:'abcd',Unicode需要12个字节,而UTF8只需要4个字节(和ASCII一样,达到最优)。
UTF8之所以可以用一个字节存储英文字母,是因此它使用了变长的编码方式。也即,对于英文字母,它采用一个字节保存这个字符。对于英文字母之后的字符,它采用两个字节保存这个字符。对于再之后的字符,采用三个字节保存。最多采用四个字节保存一个字符。
所以UTF8对于存储英文字母的高效率来源于对之后字符保存效率的牺牲。这里的合理性在于:如果待保存的文本中字符大多数为英文字母,则存储效率能够提高,因为大多数字符都是采用一个字节保存。
总结来说,
UTF8是对Unicode在存储效率上的优化
以上便是三者的关系。
ASCII和Unicode都是为一个字符指定一个唯一的数字编号,Unicode能够表达更多的字符,相当于是ASCII的扩展。Unicode存在存储效率低下的问题,UTF8是在这个方面对Unicode的优化。
ASCII、 Unicode 和 UTF8的更多相关文章
- 关于ASCII,Unicode和UTF-8
自己也不是很明白这些编码,百度了一下,整理出来与大家分享分享,在此感谢作者. 先说说这些编码 ANSI:最早的时候计算机ASCII码只能表示256个符号(含控制符号),这个字符集表示英文字母足够,其中 ...
- 字符编码 ASCII,Unicode和UTF-8的关系
转自:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143166410626 ...
- 码表 ASCII Unicode GBK UTF-8
2017-1-3 [ASCII]一个字节(7位,128个字符,2个16进制) 不包含中文 ASCII(American Standard Code for Information Interchang ...
- ASCII, Unicode 与 UTF-8
1,ASCII 由于计算机是美国人发明的,最早只有127个字符,即大小写英文字母.数字.一些符号,被编码到计算机里,这个编码表就是ASCII表.这时每个字符用1 Byte表示. 2,Unicode 当 ...
- ASCII、Unicode、UTF-8、UTF-8(without BOM)、UTF-16、UTF-32傻傻分不清
ASCII.Unicode.UTF-8.UTF-8(without BOM).UTF-16.UTF-32傻傻分不清 目录 ASCII.Unicode.UTF-8.UTF-8(without BOM). ...
- 字符编码笔记:ASCII,Unicode和UTF-8
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...
- 字符编码笔记:ASCII,Unicode和UTF-8 转
本文出处 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 只是为了记录一下省得要去搜. 今天中午,我突然想搞清楚 ...
- 理解记忆三种常见字符编码:ASCII, Unicode,UTF-8
理解什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是25 ...
- [转]字符编码笔记:ASCII,Unicode和UTF-8
转自:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 作者: 阮一峰 日期: 2007年10月28日 今天中午, ...
- 字符编码笔记:ASCII,Unicode和UTF-8(转载)
作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步 ...
随机推荐
- NDK开发环境安装,CDT安装,Cygwin安装
1.为eclipse增加c和c++的开发插件 Help中的install new software 选择 Helios-http://download.eclipse.org/release/h ...
- 开源摄影机:Axiom Camera
一般情况下只有软件才有开源这个概念.这会儿发现了个很厉害的开源的产品:开源摄影机. 我还是第一次听说摄影机也可以开源.于是去该产品的官方网站了解了一下相关信息. 官网:http://axiom.ape ...
- Android Support Design 控件 FloatingActionButton
经常刚可以看到悬浮控件,比如印象笔记的下面那个绿色的悬浮按钮,这个控件非常简单也是来自Design Support Library中同理需要在android studio中加入依赖库:design库 ...
- Java-clone总结
纸上得来终觉浅,绝知此事要躬行 --陆游 问渠那得清如许,为有源头活水来 --朱熹 clone和Copy:当有一个对象Person p1=new Person("name" ...
- 如何修改新建脚本模板-ScriptTemplates(Unity3D开发之十五)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/44957631 ...
- Android性能优化之界面UI篇
1.使用style.color.string.dimen样式来分离xml布局文件,减少代码的重复使用,增加代码复用率,防止hardcode,下面是一个例子: 在定义layout时候,因为每个View或 ...
- 数据挖掘进阶之序列模式分析算法GSP的实现
序列模式分析算法GSP的实现 一.算法简介 序列模式定义:给定一个由不同序列组成的集合,其中,每个序列由不同的元素按顺序有序排列,每个元素由不同项目组成,同时给定一个用户指定的最小支持度阈值,序列模式 ...
- LeetCode之“动态规划”:Triangle
题目链接 题目要求: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to ...
- android:inputType常用取值
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content&q ...
- 前端开发我为什么选择cordova
cordova与phonegap有什么关系? phoengap 官方网址:http://phonegap.com 如果能了解一个框架的兴起还是一件比较有趣的事.08年一次ios开发者大会上来自Nito ...