字符在计算机中的存储
在计算机中提供给用户最常见的显示就是字符,也称之为文本,字符的种类非常多,每种语言都有自己的字符集,那么,这么多的字符,如何存储进计算机中呢?
本文为你揭晓英文字符、中文字符、以及全世界所有字符在计算机中的存储。
一、字符存储的本质
每个字符都通过字符集的映射转化为一个整数存储在计算机中,所以存储字符的本质还是存储整数。
那么,如何确定一个字符对应的整数是多少呢?
二、英文字符集 —— ASCII
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系做了统一规定,这一规定被称为 ASCII 码
,ASCII 全称American Standard Code for Information Interchange
,即“美国信息交换标准代码”。
ASCII 码规定使用一个字节来存储英文字符,最前面的一位统一规定为0,不同的字符由后面的7位确定, 所以ASCII码一共规定了128个字符的编码,其中包括:
- 96个可打印字符
- 大写英文字符和小写英文字符
- 阿拉伯数字
- 标点符号
- 特殊符号
- 32个不可打印的控制符号
关于ASCII码中规定的所有字符,请参考:完整的ASCII码对照表以及各个字符的解释。
三、中文字符集
中华文明源远流长,目前汉字大约有十万个,常用的汉字都有几千个,这么多的字符,显然靠美国的ASCII码字符集是不可能存储的。
GB2312字符集
1980年中国国家标准总局制定了最早的汉字字符集 —— GB21312,全称“信息交换用汉字编码字符集”,用于汉字处理、汉字通信等系统之间的信息交换,共收入汉字6763个和非汉字图形字符682个。
GB2312基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率,但是由于中文的复杂性,特别是因为人名、地名中包含的很多字GB2312中都没有,这样导致GB2312已经越来越不能适应需要了。
因为GB2312的这些问题,国家标准化委员会又制定了GB13000,GB13000制定的原则与GB2312不同,GB13000以国际化为目标,该标准编码参照了Unicode 2.0 标准编码,与GB2312完全不兼容,因早期的计算机中的汉字采用了GB2312,无法顺利向GB13000过渡,所以GB13000变成了一个纸面上的标准,无法推广。
GBK字符集
因为GB13000的失败,国家标准化委员于1995年颁布了GBK标准,全称“汉字编码扩展规范”,GBK兼容GB2312标准,同时在GB2312标准的基础上扩展了GB13000包含的字,但编码不同。
GBK标准中收录了2万多汉字及符号,因其最早被WINDOWS采用,所以其应用范围非常广。
四、全世界的字符集 —— Unicode
正如开篇所说,全世界的语言非常多,每种语言都有自己的字符集,非常的不方便,并且极其容易出现乱码,所以Unicode字符集的诞生就是为了将世界上所有的字符都纳入其中,形成一种统一的编码规定。Unicode目前容纳了100多万个符号,每个符号的编码是唯一的,具体的符号对应表,可以查询Unicode联盟。
但是需要注意,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储,也就是说,在Unicode中一个个符号的表示至少需要2个字节,在表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。
这样就引发了一个大的问题:计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?
这个问题导致在很长的时间内Unicode并没有普及,各个国家依然使用自己的字符编码集。
五、UTF-8
在互联网出现后,强烈的需要全世界都使用一种统一的字符编码标准,在这个强大需求的推动下,Unicode编码存储方式的问题被UTF-8解决了。
UTF-8是一种变长的编码方式,它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,而Unicode字符集的问题刚好在于字符编码的长度一直在变化,这简直是天作之合,Unicode字符集 + UTF-8编码方式迅速普及开来。
UTF-8的编码规则如下:
对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英文字符,UTF-8 编码和 ASCII 码是相同的。
对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。
Unicode符号范围(十六进制) | UTF-8编码方式(二进制) |
---|---|
0000 0000-0000 007F | 0xxxxxxx |
0000 0080-0000 07FF | 110xxxxx 10xxxxxx |
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
eg.
'王'
的 Unicode编码 是\u738b
(0111 0011 1000 1011),根据上表,可以发现738b
处在第三行的范围内(0000 0800 - 0000 FFFF),因此王
的 UTF-8 编码需要三个字节,即格式是1110xxxx 10xxxxxx 10xxxxxx。然后,从最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,严的 UTF-8 编码是11100100 10111000 10100101,转换成十六进制就是E4B8A5。
字符在计算机中的存储相关推荐
- C语言中整型在计算机中的存储
一 . 整型的表示 1.字面值后面加上L(l)表示long长整型 2.字面值后面加上U(u)表示usigned整型值 3.十进制123 ... 4.八进制,以0开头,如0123,0754 ... ...
- 字符在计算机中是如何表示的?
如果计算机只存储二进制数据,那么它如何表示字符呢?计算机使用的是字符集,将字符映射为整数.早期,字符集只用 8 位表示.即使是现在,在字符模式(如 MS-DOS)下运行时,IBM 兼容微机使用的还是 ...
- C语言中整型浮点型在计算机中的存储
第一次写博客,遣词造句有点菜,算是一次简单梳理,慢慢学习人家的博客风格,随着学习的深入再做修改. 本次学习的是C语言在VS下的编译调试,对于初学者两说,首先说一下如何监控变量,以及监控变量在内存中的存 ...
- 探索“小数”在计算机中的存储
本文介绍了小数在计算机中的存储方式,第一种为定点方式,这种方式很少遇到,但在Matlab中有涉及,见图文<Matlab与线性代数–显示格式的设置>.第二种为浮点方式,一个浮点数由阶码和尾数 ...
- 视频在计算机中的存储
文章目录 1 视频在计算机中的存储 1.1 视频在计算机中的存储方式 1 视频在计算机中的存储 1.1 视频在计算机中的存储方式 就是一系列图像一张接一张地播放而形成的,我们将这些单个的图像称为帧.从 ...
- 音频在计算机中的存储
文章目录 1 音频在计算机中的存储 1.1 音频是模拟数据 1.2 采样 1.3 编码 1.4 位率 1.5 编码标准 1 音频在计算机中的存储 1.1 音频是模拟数据 模拟数据就是随时间或空间而连续 ...
- 数据在计算机中的存储
1.大小端模式(字节序) 大小端的概念:数在内存中分字节存储的先后顺序.大端模式即数的低位存在高地址,高位存在低地址当中.而小端模式相反,低位存在低地址,高位存在高地址.比如0x1234,这里的高低位 ...
- 负数在计算机中的存储和表示
1.负数在计算机中的存储 计算机中的有符号数有三种表示方法,即原码.反码和补码.三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正",用1表示"负", ...
- 无符号数在计算机中怎么存储,计算机中数的存储
计算机中数的存储 1.计算机的存储单元 计算机内有很多存储单元,计算机用这些存储单元存储数据,一个存储单元可以存储一个八位的二进制数,一个存储单元又称作一个字节,记作1B.计算机的处理器一次可以处理的 ...
最新文章
- 怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!
- SciHub下载量成论文影响力预测指标:能被下载的论文被引次数高出72%
- 线程池Executors创建多线程案例
- 函数最值题目及答案_呆哥数学每日一题 ——多元函数求最值
- ClassNotFoundException:是否减慢了您的JVM?
- php文件缓存代码,php文件缓存实例代码
- mysql查询缓存到redis_php查询mysql并缓存到redis
- Jeewx-Enterprise_1.1版本发布,开源微信企业号开发平台
- 中剪取一种颜色的板块_不知道UI设计中APP界面版式如何排版?来看这个!
- 【MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记】
- [翻译] GiFHUD
- MySql数据库 - 2.启动与关闭
- AngularJs学习的前景及优势
- linux软件包管理rpm
- LintCode 171. Anagrams
- 51单片机:定时器/计数器TMOD设定
- 高考早知道:自主招生,能用低分读名校,就别再拼高分挤独木桥
- dockerexec 的使用-it操作
- Java获取文件大小
- 关于uni-app获取完整的iccid(中间带有字母的iccid)