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得到了大范围的使用。
ASCII, UNICODE, UTF-8, 字符集理解的更多相关文章
- ASCII UNICODE UTF "口水文"
最近接了一个单是需要把非 UTF-8 (No BOM)编码的文件转换成 UTF-8 (No BOM),若此文件是 UTF-8 但带有 BOM ,需要转换成不带 BOM 的.于是开启了一天的阅读.首先花 ...
- 字符集、字符编码、国际化、本地化简要总结(UNICODE/UTF/ASCII/GB2312/GBK/GB18030)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 环境说明 普通的linux 和 普通的windows. ...
- Unicode和多字节字符集
今天自己写的发现一个输出路径程序使用unicode字符集只能输出单个的首字符,问了一下同事,改为使用多字节字符集,问题解决了 于是上网看了他们的区别: 很多没看完,但起码了解到字符集的演变过程, 转 ...
- Unicode和多字节字符集 (MBCS) 杂谈
这个估计是很多人曾经头疼过的问题,现在的VC版本基本都支持Unicode和多字节字符集 (MBCS),在进行MFC编程时VC的默认设置是unicode字符集.但是我们通常需要做一些代码移植的工作,如果 ...
- Unicode(UTF&UCS)深度历险
Unicode(UTF&UCS)深度历险 计算机网络诞生后,大家慢慢地发现一个问题:一个字节放不下一个字符了!因为需要交流,本地化的文字需要能够被支持. 最初的字符集使用7bit来存储字符,因 ...
- 浅显总结ASCII Unicode UTF-8的区别
如果觉得此地排版不好,欢迎访问我的博客 浅显总结ASCII Unicode UTF-8的区别 制作表单时,为了追求更好的用户交互体验,常常会有提示性的内容,比如提醒用户字符的限制.由于英文,中文字符的 ...
- 使用Unicode(宽字节字符集);多字节字符集中定义宽字节变量
2012-03-25 14:54 (分类:计算机程序) 2.2 宽字符和C 宽字符不一定是Unicode.Unicode是宽字符集的一种.然而,因为本书的焦点是Windows而不是C执行的理论,所以书 ...
- 字符编码 ASCII,Unicode和UTF-8的关系
转自:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143166410626 ...
- 字符编码 ASCII unicode UTF-8
字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(b ...
随机推荐
- 深入剖析php执行原理(4):函数的调用
本章开始研究php中函数的调用和执行,先来看函数调用语句是如何被编译的. 我们前面的章节弄明白了函数体会被编译生成哪些zend_op指令,本章会研究函数调用语句会生成哪些zend_op指,等后面的章节 ...
- 理解活在Iphone中的那些App (一)
关于一个app的生命 干IOS开发两年多了,如果把大学中的时间也算上,编程也有六年了.这些时间中,从一个懵懵懂懂的学徒,变成一个还算熟练的码农,也多多少少有一点反思.于是,边促成了理解活在Iphone ...
- cocos2d::CCFileUtils::sharedFileUtils()->getFileData(szFile, "r", &bufferSize) 不同平台返回值不一样
string pathKey = CCFileUtils::sharedFileUtils()->fullPathForFilename(fileName); unsigned char* pB ...
- 2424. [HAOI2010]订货【费用流】
Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...
- C语言文件操作总结
文件的打开操作 fopen 打开一个文件,操作文件指针FILE * 文件的关闭操作 fclose 关闭一个文件 文件的读写操作 fgetc 从文件中读取一个字符 fputc 写一个字符到文件中去 fg ...
- python - 流程控制基础习题
#打印1 到100 的和** i = 0 s = 0 while i <100: i += 1 s += i print(s) print('1+2+,,100=',s) #打印字符A~Z fo ...
- Java并发编程(六)原子性与易变性
原子性 原子是最小单元.不可再分的意思.原子性是指某个操作在获取CPU时间时,要么就给它足够时间,让这个操作执行完,要么就不执行这个操作,执行时不能出现上下文切换(把CPU时间从一个线程分配到另一个线 ...
- python3爬虫-通过requests爬取图虫网
import requests from fake_useragent import UserAgent from requests.exceptions import Timeout from ur ...
- $(document).ready(function(){})与window.load
$(document).ready(function(){ //to do something}) 是当文档全部加载完全的时候触发,包括img也加载完成但是相关的文件没有下载下来,能同时编写多个 wi ...
- putty登录出现access denied的解决办法
[转]https://www.aliyun.com/jiaocheng/152659.html 在/etc/ssh/sshd_config 中有个 PermitRootLogin, 改成“Permit ...