美文网首页
ASCII码和字符转换

ASCII码和字符转换

作者: 汪小鱼 | 来源:发表于2021-11-09 18:01 被阅读0次

1 前言

  本文是基于《编码》、《穿越计算机的迷雾》两部著作进行读后整理的记录性博客。对书中较为重要的内容进行归纳整理进行二次创作,略去了繁琐的讲述细节,力求简明扼要。


编码:一种由若干符号和规则组成的系统,用来向计算机表述指令。

2 正文

2.1 字符编码

  正如我们在前面内容中的介绍一样,对于计算机我们知道它具备存储器能够存储二进制比特信息。但细细一想,我们不禁会产生诸多疑惑。例如,既然计算机存储的都是二进制比特信息,那我们的文本、音视频等多种格式的文件是如何在计算机中存储的呢?计算机为什么能够 “记住” 这些不同类型的信息呢?

  数字计算机中的存储器唯一可以存储的是比特,因此如果要想在计算机上处理信息,就必须把它们按位存储。通过先前的学习,我们已经掌握了如何用比特来表示数字和机器码。现在我们面临的一大挑战就是如何用它来存储文本(本文我们以文本文件为例进行介绍,音视频等文件类似)。

  为了将文本表示为数字形式,我们需要构建一种系统来为每一个字母赋予一个唯一的编码。这和我们前面介绍的一种人机沟通的方式类似,我们要想计算机 “记住” 这些属于我们人类认知的知识,必需定义一种规范——一种双方都能理解的规则。

  简而言之,所有由符号所表示的字母和数字都需要编码。具有这种功能的系统被称为字符编码集(CodedCharacter Set),系统内的每个独立编码称为字符编码(Character Codes)。

这里的编码和我们前面介绍计算机指令时,通过助记符标记指令便于人类记忆相反。我们需要将我们日常语言中的各种字符转换为计算机能够理解的二进制代码,比如我们想要计算机知道我们输入的是字母 A,我们约定 A 即为编码数值 065,也即用数值代表文字。但需要注意的是数字本身也是一种文本,也需要进行编码,计算机不知道数字对它们来说意味着什么(简单来说它们只能识别电信号)。

  了解了这种思想之后,我们便可以开始实现编码实现字符转换。首先要解决的第一个问题是:构成这些编码究竟需要多少比特?

  如果每个设计计算机的人都构造自己的编码系统,并且独立使用,那么文件的互传互通将困难重重。显而易见的是,我们需要一套统一的规范的编码标准。

其实,早期发展中是会存在不同公司使用不同的标准,但历史证明,统一规范才是正道。

  幸运的是,这种标准已经存在并且被广泛使用,它被称为美国信息交换标准码(AmericanStandard Code for InformationInterchange),简称为ASCII 码,发音很像 ASS-key。从 1967 年正式公布至今,它一直是计算机产业中最重要的标准。

  ASCII 码是 7 位编码,它的二进制取值范围为 0000000~1111111,对应于十六进制就是 00h~7Fh。下表列出了其中 32 个字符及相应的十六进制编码(完整对应关系可以查看:ASCII_百度百科 (baidu.com))。

  有了这种编码方式,我们就可以将字符串转换成 ASCII 码。例如:I am 12 years old.,转换后用十六进制数表示为:49 20 61 6D 20 31 32 20 79 65 61 72 73 20 6F 6C 64 2E。

  ASCII 码对英文字符与二进制之间的关系做了统一的规定,作为 7 位编码 ASCII 码一共规定了 128 个字符。但随之而来的问题是:英语用 128 个符号编码就够了,但是用来表示其他语言,128 个符号显然是不够的。不同国家有着自己的语言系统,也需要这样一套编码方式。显然,如果各个国家自己用自己的,那互通又成了一个繁琐的问题。

  业界一直有一个目标,那就是建立一个独一无二的字符编码系统,它可以用于世界上所有语言文字,从 1988 年开始,几大著名计算机公司合作研究出一种用来替代 ASCII 码的编码系统,取名为 Unicode(统一化字符编码标准)。相对于 ASCII 的 7 位编码,Unicode 采用了 16 位编码,每一个字符需要 2 个字节。也就是说 Unicode 的字符编码范围为 0000h~FFFFh,总共可以表示 65,536 个不同字符。全世界所有的人类语言,尤其是经常出现在计算机通信过程中的语言,都可以使用同一个编码系统,而且这种系统还具备很高的扩展性。

  Unicode 编码其实并不是从零开始设计的,例如前 128 个字符编码——即 0000h~007Fh——与 ASCII 码是一致的。全世界很多标准也被一同收录在 Unicode 中。Unicode 编码整合了部分之前的编码,并进行扩充。

  对于 Unicode 来讲,它唯一的问题,就是它改变了字符与存储空间之间 “单字符,单字节” 的等价对应关系。采用 ASCII 编码方式存储的著作《怒火之花》,其所占据的存储空间约为 1 MB。而如果采用 Unicode 编码,约占 2 MB。为了使编码系统兼容,Unicode 在存储空间上付出了相应的代价。

  随着后续的发展,Unicode 也逐步演化出 UTF-8、UTF-16 等,这里就不展开叙述。

对这部分内容感兴趣的可以查阅阮一峰老师的博客:字符编码笔记:ASCII,Unicode 和 UTF-8 - 阮一峰的网络日志 (ruanyifeng.com)


3 小结

  ASCII 码和字符转换篇介绍了编码的发展以及产生,介绍了ASCII 编码和 Unicode 编码两种编码方式。为了精简内容删减了部分较为详细的书写,仅作为整理总结。

相关文章

  • python ASCII码和字符互转

    python获得字符的ASCII码: ord("x")将ASCII数字转换为字符: chr(number)

  • js基本方法

    1.转换输入字符为ASCII码charCodeAt()

  • ASCII码和字符转换

    1 前言   本文是基于《编码》、《穿越计算机的迷雾》两部著作进行读后整理的记录性博客。对书中较为重要的内容进行归...

  • SQL SERVER函数

    一、字符转换函数 1、ASCII() 返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的...

  • C++字符串转换中的一些问题

    一、字符串与数字的简单转换(基于ascii码) 数字与字符可以可以基于ascii码进行转换 决定了并不是任意数字都...

  • SQL常用函数集锦

    一、字符转换函数 1、ASCII() 返回字符表达式最左端字符的ASCII码值。在ASCII()函数中,纯数字的字...

  • 转换函数

    类型转换函数 string CharToStr( int ACSII码 )将ASCII码转换成字符串 :: 输入...

  • 编码 -- python2

    机器码到字符(中文字符、英文字符...)的转换关系 ASCII ASCII(American Standard C...

  • Python生成[a-z]列表的两种方法 by L0st

    自己写个列表: 使用ascii码: python中 chr(数字) 会将转换为ascii码对应的字符,ord()则相反。

  • 字符串相关函数

    1、字符串反转方法一: 方法二: 方法三: 2、字符串切割 3、字符和ASCII码转换

网友评论

      本文标题:ASCII码和字符转换

      本文链接:https://www.haomeiwen.com/subject/gmspzltx.html