计算机字符编码的发展

目录

背景

发展

第一阶段:ASCII编码

第二阶段:扩展ASCII编码

第三阶段:各国编码

第四阶段:Unicode编码

第五阶段:UTF系列编码方式

相关扩展


背景

在计算机诞生初期,所有的数据都是基于二进制数(0和1)来表示的。如果人类直接操作二进制数据会出现很多问题(如可读性差、易出错等),为了解决这个问题(让计算机能够理解和处理人类语言),方便人类使用计算机,一种相关技术就应运而生,这就是字符编码(一套将人类语言转换为二进制数据的规则或系统)。


发展

第一阶段:ASCII编码

遇到的问题:在计算机发展的早期,当时计算机开始普及并需要进行字符的传输和存储。然而,由于各种计算机系统和程序使用的字符表示方式不尽相同,导致文本数据在交换和处理时容易出现混乱和错误。

解决方案:为了解决不同计算机系统之间字符编码不一致的问题,ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)就此诞生。

PS:字符编码中最小的存储单位是字节,而标准ASCII只使用了7位(最高位为0)。标准ASCII只能表示128个不同的字符(主要用于表示英文字符、数字、标点符号和控制字符等)。


第二阶段:扩展ASCII编码

遇到的问题:由于计算机最初是由美国人发明的,因此ASCII编码主要基于英文字符集进行设计。如果计算机只在美国使用的话,也没有什么太大的问题,但是后来其它国家也开始使用计算机的时候,发现它们国家里面的字符根本不在这128个字符里面。

解决方案:其它国家在原有的ASCII码基础上进行扩展,就是将原来二进制数最高位的0变为1,也就是从128扩展到255(等于新增的128个字符)对应ASCII码叫作扩展ASCII码。通过对ASCII码的扩展,似乎解决了一些欧洲国家的字符编码问题。


第三阶段:各国编码

遇到的问题:随着计算机应用的全球化和多语言环境的出现,各国因语言不同,标准的ASCII编码已不满足。而扩展ASCII码并没有一个统一的国际标准,因此不同的系统、平台或编程语言可能采用不同的扩展ASCII码表。这可能会导致在不同环境之间交换文本数据时出现字符编码不兼容的问题。

解决方案:各国开始发展自己的字符编码标准,以满足本国语言和字符的表示需求。这些编码标准通常与ASCII码和扩展ASCII码有所不同,并具有更大的字符集和更复杂的编码规则。

PS:我国与之对应的编码是GB2312字符编码和对GB2312进行扩充的GBK字符编码等主要用于表示中文字符。其中GBK编码于1995年12月正式发布。


第四阶段:Unicode编码

遇到的问题:随着全球化的进一步推进,各国之间的信息交流愈加的频繁,而各国编码并没有一个统一的国际标准,各种编码标准之间产生冲突和乱码问题。

解决方案:需要一种能够统一表示全球各种字符的编码方案,以解决各国编码带来的兼容性问题。这个时候提出了Unicode(统一码、万国码、单一码)这样的一个标准。Unicode标准定义了世界上几乎所有书写系统中的字符的码点(code points),即给每个字符分配了一个唯一的数字标识符(通常是一个16位或32位的整数)。

PS:Unicode只定义了字符的码点,相等于是一个标准的字符集。具体的字符编码取决与使用的Unicode的编码方式。

Unicode最初编码方式的演变:

因Unicode编码本身并不直接指定这些码点如何存储在计算机中,最初的它使用16位(即固定的两个字节)的编码空间,采用了类似UCS-2固定宽度的编码方式。但由于字符数量的增加,最多只能表示65,536个(2^16)不同的字符,需要表示的字符数量远远超出了16位所能表示的范围。(主要概况就是:设计的局限性显现)

为了解决16位编码空间的局限性,Unicode标准引入了两种主要的解决方案:

  1. 类似于UCS-4编码方式:即使用更多的位数(通常是32位或4个字节,也就是将近43亿[2^32])来表示每个字符,从而扩大编码空间。这种方式基本上就能涵盖世界上所有的字符了。但是这样的编码规则并没有被世界各国很好的接受,因为这种方式会增加存储和传输的成本(每个字符固定了4个字节)。
  2. 支持额外的机制:在保留16位编码空间的同时,引入额外的机制来表示超出16位编码范围的字符。这主要通过使用“代理对”(surrogate pairs)来实现,即使用两个16位的编码单元来表示一个超出基本多语言平面(BMP)的字符。这种方式能够在不大幅增加存储和传输成本的前提下,支持更多的字符。但这种方式会使得编码和解码过程变得复杂。

补充:在Unicode字符集的发展历史中,有两个主要的组织或项目在推动单一字符集的创建:国际标准化组织(ISO)于1984年创建的通用字符集(Universal Character Set, UCS),这后来由ISO 10646(或称ISO/IEC 10646)标准所定义;另一个是由一些软件制造商(如Xerox、Apple等)于1988年成立的Unicode团队。这两个项目在初期是独立的,但随着时间的推移,他们意识到世界不需要两个不兼容的字符集,因此开始合并双方的工作成果,为创建一个单一编码表而协同工作(从Unicode 2.0开始,Unicode的编码与ISO/IEC 10646标准(UCS)实现了一致,两者共享相同的字符编码和字符集)。随着技术的发展和标准化工作的推进,现编码中UCS编码已经合并到Unicode编码中了。

这里再补充一个点:UCS字符集包含UCS-2编码方式和UCS-4编码方式,UCS的开发进度快于Unicode,1990年就公布了第一套编码方法UCS-2。后续Unicode在1996年7月公布,明确宣布是UCS-2的超集。


第五阶段:UTF系列编码方式

介绍:因Unicode编码本身并不直接指定这些码点如何存储在计算机中,它定义了多种编码形式,其中UTF(Unicode Transformation Format)系列是一种用于编码Unicode字符集的字符编码方式。

遇到的问题:虽然Unicode字符集包含了全球各种字符,但最初编码方式存在的问题,如编码长度固定和不同编码方式之间的冲突,限制了存储和传输效率。所以说Unicode标准推出了很长一段时间,并没有被广泛接受,直到后面互联网时代的来临,各国之间的信息交流愈加的频繁,这时候不得不对编码进行重新思考。

解决方案:为了解决这些问题,UTF系列编码方式应运而生,其中最具代表性的是UTF-8。

UTF系列,全称为Unicode Transformation Format,是用于表示Unicode字符集的一种字符编码方式。UTF系列包括UTF-8、UTF-16和UTF-32三种主要编码类型,每种类型都有其特定的应用场景和优势。

以下是关于UTF系列的详细说明:

  • UTF-8
    • 特点:一种可变长度的Unicode编码方式,优点之一是节省空间,它使用1到4个字节来编码Unicode字符。UTF-8编码在表示ASCII字符时与ASCII编码兼容,即ASCII字符在UTF-8中的编码与它们在ASCII中的编码相同,都是单个字节。这使得UTF-8在处理以ASCII字符为主的文本时具有更高的效率。
    • 使用场景:广泛应用于互联网和计算机系统中,如网页编码、文件存储等。
  • UTF-16
    • 特点:UTF-16可以看作是UCS-2的父集(源于UCS-2)。它是固定或可变长度的,取决于字符的Unicode代码点。在没有辅助平面字符之前,UTF-16与UCS-2是相同的,都使用两个字节表示字符。但是,当引入辅助平面字符后,UTF-16扩展为能够表示更多字符的编码方式。( UTF-16 通常使用 2 个字节来编码字符,但当遇到辅助平面内的字符时,它需要使用 4 个字节(两个 16 位单元)来编码。这种设计使得 UTF-16 在处理常用字符时非常高效(只需要 2 个字节),同时又能支持整个 Unicode 字符集。然而,这也使得 UTF-16 的编码长度不是完全固定的,需要根据具体的字符来确定)
    • 使用场景:操作系统、编程语言、数据库等需要表示Unicode字符的场景,特别是在Windows操作系统中,UTF-16是默认的字符编码方式。
  • UTF-32
    • 特点:始终使用固定长度4个字节表示一个Unicode字符。这种编码方式对于处理Unicode字符非常直接,但可能会浪费存储空间。(UTF-32与UCS-4在编码方式上非常相似,都是使用四个字节的固定长度来表示每个字符)
    • 使用场景:需要严格区分字符和编码的场景,如文本编辑器、网页开发等。

至此,以上就是字符编码的大致发展历程。


相关扩展

  • 字符编码是编码的一个子集。
  • 字符编码整个过程包括字符集、码点、编码方式、编码、解码。
    • 字符集是整个字符编码的基础,表示该字符编码中所有字符的集合。
    • 码点是字符集为每个字符分配的一个唯一的数字编号作为码点,用于在计算机中唯一标识该字符。
    • 用于将字符映射到特定的字节序列称为编码方式(是一种映射规则)。
    • 编码是将字符转为二进制数的过程。
    • 解码是编码的逆过程,将二进制数转为字符。
  • 每一种字符编码都有一种字符集和码表(Unicode字符集有多种编码方式)。
  • 使用不同编码方式进行编码和解码会产生乱码。
  • UTF-8编码中文需要占3个字节,GBK编码中文需要占2个字节。【因UTF-8编码和GBK编码都兼容了ASCII编码,所以对于ASCII字符(包括英文字母、数字和一些标点符号)使用1个字节】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/844645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

samba_ubuntu_share_vmbox_vmware

_____ Ubuntu 利用 samba 与 win 直接共享文件夹 _____ samba Samba - 维基百科,自由的百科全书 (wikipedia.org) 用于 win 和 unix 直接访问资源 samba 为选定的 unix 目录建立网络共享, 使得 win 用户可以像访问普通 win 下的文件夹那样来通过网络来…

npm : 无法加载文件 D:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本

安装npm时出现如下提示: 出现这个错误信息,是系统禁止执行PowerShell的脚本。 出现的原因是,系统默认的执行策略是Restricted(默认设置),限制执行,所以会出现如上提示。 解决方法:…

Linux服务器配置ssh证书登录

1、ssh证书登录介绍 Linux服务器ssh登录有密码登录和证书登录两种。如果使用密码登录,容易遭受密码泄露或者暴力破解,我们可以使用ssh证书登录并禁止使用密码登录,ssh证书登录通过公钥和私钥来完成整个连接过程,公钥保存在服务器…

Java中Arrays.toString与new String()字节数组使用的差异

Java 编程语言提供了许多内置方法和类,这使得程序员能够更加方便的处理数据和对象。本文将讨论 Arrays.toString 方法和 new String() 方法在处理字节数组时的不同。 文章目录 Arrays.toString 方法new String() 方法总结 Arrays.toString 方法 Arrays.toString() …

高维数组到向量的转换:两种方法的深度解析

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:高维数组的挑战与需求 二、方法一:使用NumPy库进行展平 示…

如何将md文件精确的转换成docx文件

如何将md文件转换成docx? 文章目录 如何将md文件转换成docx?一、如何将MD文件比较完美的转换成word呢?二、方法3 步骤1、下载一个可用的MarkDown编辑器2、下载Pandoc安装 三、来进行转化了 一、如何将MD文件比较完美的转换成word呢&#xff1…

从零开始学Vue3--根据目录结构自动生成路由

我们在测试或者小项目中经常遇到一个问题,就是加一个页面,就要在router.js中加一个路由,相当的麻烦,有没有办法可以根据目录结构自动生成路由呢? 想要自动生成路由,最重要的是能够获取指定目录下vue的路径…

开源代码分享(31)-计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度

参考文献: [1]孙惠娟,刘昀,彭春华,等.计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度[J].电网技术,2021,45(09):3534-3545.DOI:10.13335/j.1000-3673.pst.2020.1720. 1.摘要 为了促进多能源互补及能源低碳化,提出了计及电转气协同的含碳捕集与垃…

canfd与can2.0关系

canfd是can2.0的升级版, 支持canfd的设备就支持can2.0,但can2.0的设备不支持canfd 参考 是选CAN接口卡还是CANFD接口卡_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Hh411K7Zn/?spm_id_from333.999.0.0 哪些STM32有CANFD外设 STM32G0, STM…

Python 计算两组点云间的距离

两组点云间距离计算 一、介绍1.1 概念1.2 函数讲解二、代码示例三、结果示例一、介绍 1.1 概念 点云距离计算 :计算从源点云中每个点到目标点云中最近邻点的距离。 1.2 函数讲解 def compute_point_cloud_distance(self, target): # real signature unknown; restored from _…

使用OrangePi KunPeng Pro部署AI模型

目录 一、OrangePi Kunpeng Pro简介二、环境搭建三、模型运行环境搭建(1)下载Ollama用于启动并运行大型语言模型(2)配置ollama系统服务(3)启动ollama服务(4)启动ollama(5)查看ollama运行状态四、模型部署(1)部署1.8b的qwen(2)部署2b的gemma(3)部署3.8的phi3(4)部署4b的qwen(5)部…

工作中有哪些超级好用的C/C++程序库?

视频和讲义发布在这里: B站链接

Android Ktor 网络请求框架

Ktor 是一个由 JetBrains 开发的用于 Kotlin 编程语言的应用框架,旨在创建高性能的异步服务器和客户端应用程序。由于完全基于 Kotlin 语言,Ktor 能够让开发者编写出简洁、可读性强且功能强大的代码,特别适合那些已经熟悉 Kotlin 的开发人员。…

Python算法设计与分析期末

Python算法设计与分析期末通常涉及对算法基础知识的理解和应用,包括但不限于以下几个方面: 算法基础:了解算法的定义、特性(确定性、有穷性、可行性等)以及算法的分类。 时间复杂度和空间复杂度:学会分析算…

调试记录-U盘枚举失败之LPM影响

现象 板子接部分U盘出现枚举失败,看log像是硬件信号问题,如: [ 29.186464] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.079624] usb usb3-port1: Cannot enable. Maybe the USB cable is bad? [ 30.080200]…

【高校科研前沿】南科大姜丽光课题组在地球物理学领域TOP期刊Geophys. Res. Lett.发表极端气候频发下水库蓄水状态的相关研究成果

文章简介 论文名称:Reservoir Filling Up Problems in a Changing Climate:Insights From CryoSat‐2 Altimetry 第一作者及单位:汪志伟(硕士研究生 南方科技大学环境学院) 通讯作者及单位:姜丽光(助理教…

JAVA:多线程常见的面试题和答案

请关注微信公众号:拾荒的小海螺 博客地址:http://lsk-ww.cn/ 1、并发编程三要素? 原 子 性 原子性指的是一个或者多个操作,要么全部执行并且在执行的过程中不被其他操作打断,要么就全部都不执行。可 见 性 可见性指多…

电脑录屏怎么录?7个电脑录屏软件免费版强势来袭,赶快收藏!

电脑录屏怎么录?相信很多小伙伴们都不知道怎么在Windows电脑上录屏吧?在当今社会,随着互联网的快速发展,越来越多的小伙伴们开始通过制作视频内容来分享知识、展示技能或者记录生活。电脑录屏成为了一种简单高效的方式&#xff0c…

MarkDown语法使用手册

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

RabbitMQ详情

一.MQ简介 什么是MQ MQ本质是队列,FIFO先入先出,队列中存放的内容是message(消息),还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中是常见的上下游“逻辑解耦物理解耦”的消息通信服务。 主…