在计算机中提供给用户最常见的显示就是字符,也称之为文本,字符的种类非常多,每种语言都有自己的字符集,那么,这么多的字符,如何存储进计算机中呢?

本文为你揭晓英文字符、中文字符、以及全世界所有字符在计算机中的存储。

一、字符存储的本质

每个字符都通过字符集的映射转化为一个整数存储在计算机中,所以存储字符的本质还是存储整数

那么,如何确定一个字符对应的整数是多少呢?

二、英文字符集 —— 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。

字符在计算机中的存储相关推荐

  1. C语言中整型在计算机中的存储

    一 . 整型的表示 1.字面值后面加上L(l)表示long长整型 2.字面值后面加上U(u)表示usigned整型值 3.十进制123  ... 4.八进制,以0开头,如0123,0754  ... ...

  2. 字符在计算机中是如何表示的?

    如果计算机只存储二进制数据,那么它如何表示字符呢?计算机使用的是字符集,将字符映射为整数.早期,字符集只用 8 位表示.即使是现在,在字符模式(如 MS-DOS)下运行时,IBM 兼容微机使用的还是 ...

  3. C语言中整型浮点型在计算机中的存储

    第一次写博客,遣词造句有点菜,算是一次简单梳理,慢慢学习人家的博客风格,随着学习的深入再做修改. 本次学习的是C语言在VS下的编译调试,对于初学者两说,首先说一下如何监控变量,以及监控变量在内存中的存 ...

  4. 探索“小数”在计算机中的存储

    本文介绍了小数在计算机中的存储方式,第一种为定点方式,这种方式很少遇到,但在Matlab中有涉及,见图文<Matlab与线性代数–显示格式的设置>.第二种为浮点方式,一个浮点数由阶码和尾数 ...

  5. 视频在计算机中的存储

    文章目录 1 视频在计算机中的存储 1.1 视频在计算机中的存储方式 1 视频在计算机中的存储 1.1 视频在计算机中的存储方式 就是一系列图像一张接一张地播放而形成的,我们将这些单个的图像称为帧.从 ...

  6. 音频在计算机中的存储

    文章目录 1 音频在计算机中的存储 1.1 音频是模拟数据 1.2 采样 1.3 编码 1.4 位率 1.5 编码标准 1 音频在计算机中的存储 1.1 音频是模拟数据 模拟数据就是随时间或空间而连续 ...

  7. 数据在计算机中的存储

    1.大小端模式(字节序) 大小端的概念:数在内存中分字节存储的先后顺序.大端模式即数的低位存在高地址,高位存在低地址当中.而小端模式相反,低位存在低地址,高位存在高地址.比如0x1234,这里的高低位 ...

  8. 负数在计算机中的存储和表示

    1.负数在计算机中的存储 计算机中的有符号数有三种表示方法,即原码.反码和补码.三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正",用1表示"负", ...

  9. 无符号数在计算机中怎么存储,计算机中数的存储

    计算机中数的存储 1.计算机的存储单元 计算机内有很多存储单元,计算机用这些存储单元存储数据,一个存储单元可以存储一个八位的二进制数,一个存储单元又称作一个字节,记作1B.计算机的处理器一次可以处理的 ...

最新文章

  1. 怒肝两个月MySQL源码,我总结出这篇2W字的MySQL协议详解(超硬核干货)!!
  2. SciHub下载量成论文影响力预测指标:能被下载的论文被引次数高出72%
  3. 线程池Executors创建多线程案例
  4. 函数最值题目及答案_呆哥数学每日一题 ——多元函数求最值
  5. ClassNotFoundException:是否减慢了您的JVM?
  6. php文件缓存代码,php文件缓存实例代码
  7. mysql查询缓存到redis_php查询mysql并缓存到redis
  8. Jeewx-Enterprise_1.1版本发布,开源微信企业号开发平台
  9. 中剪取一种颜色的板块_不知道UI设计中APP界面版式如何排版?来看这个!
  10. 【MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记】
  11. [翻译] GiFHUD
  12. MySql数据库 - 2.启动与关闭
  13. AngularJs学习的前景及优势
  14. linux软件包管理rpm
  15. LintCode 171. Anagrams
  16. 51单片机:定时器/计数器TMOD设定
  17. 高考早知道:自主招生,能用低分读名校,就别再拼高分挤独木桥
  18. dockerexec 的使用-it操作
  19. Java获取文件大小
  20. 关于uni-app获取完整的iccid(中间带有字母的iccid)

热门文章

  1. 一致性哈希算法 mysql_一致性哈希算法 CARP 原理解析, 附 Golang 实现
  2. 正确认识智能视频分析技术
  3. 如何在A4相纸上打印4张5寸相片
  4. 超体故事:写作,我想少一些功利多一点真诚
  5. [zz]2007年的152条牛人经典BT语录,强烈推荐!
  6. 2020年国内优秀原创IT技术书都在这了
  7. 我为什么花 1 万多买 MacBook Pro,重点是推荐我常用的开发写作相关的工具
  8. FreeBSD ZFS
  9. 工匠精神消失的手机2020:衰落、变局、绝唱、破圈
  10. 【C语言】字符串数组按字典升序