【字符集详解】

目录

  • ASCII 字符集
    • 诞生背景
    • 编码原理
    • 字符分类及对应编码
    • 应用领域
    • 局限性
  • GBK 字符集
    • GBK 字符集的诞生背景
    • 编码原理
    • 字符构成
    • 与 ASCII 的关系和优势
    • 应用场景
    • 局限性
  • Unicode 字符集
    • 基本概念
    • 编码空间与字符范围
    • 与 GBK 的比较及优势
    • 应用领域

ASCII 字符集

ASCII(American Standard Code for Information Interchange)即美国标准信息交换代码,作为计算机领域中最早且广泛应用的字符集,在现代信息技术发展历程中扮演着关键角色。以下展开详细介绍:

诞生背景

20 世纪 60 年代,计算机技术开始兴起,但不同计算机设备和系统之间的字符表示缺乏统一标准,这给数据交换和通信带来极大不便。为解决这一问题,美国国家标准学会(ANSI)着手制定 ASCII 字符集,旨在提供一种通用的、标准化的字符编码方式,以确保不同计算机系统间的信息能够准确无误地交换和识别。

编码原理

7 位二进制编码:ASCII 采用 7 位二进制数对字符进行编码,由于计算机存储以字节(8 位)为基本单位,实际存储时会在最高位补 0,凑足 1 个字节(8 位)。7 位二进制数的组合数量为 ,因此 ASCII 字符集最多可表示 128 个不同字符。

字符分类及对应编码

  • 控制字符(0 - 31 和 127):这部分字符不可见,主要用于控制设备和通信过程。比如,编码为 0 的 NULL 字符,常作为字符串结束标志,在 C 语言等编程语言中,用于标记字符串的结尾;编码为 7 的 BEL 字符,能让计算机发出提示音,在一些简单的终端程序中,可用于提醒用户操作结果;编码为 13 的 CR(回车符)和编码为 10 的 LF(换行符),在文本处理中用于控制文本的换行和排版,Windows 系统中使用 CR + LF(\r\n)表示换行,而 Unix 和 Linux 系统仅使用 LF(\n)。
  • 可打印字符(32 - 126):
    • 空格字符:编码为 32,是可打印字符中唯一的空白字符,用于在文本中分隔单词和其他字符。
    • 数字字符:从 0 到 9,编码范围是 48 - 57,数字字符的编码顺序与其数值大小顺序一致,便于进行数字的比较和运算。比如在字符串排序中,数字字符可依据 ASCII 码值按从小到大顺序排列。
    • 大写字母:从 A 到 Z,编码范围是 65 - 90,字母的编码也具有一定规律,相邻字母的编码值相差 1,这种规律性在字符处理算法中非常有用,如在实现简单的凯撒密码加密时,可通过对字母的 ASCII 码值进行简单偏移来实现加密和解密。
    • 小写字母:从 a 到 z,编码范围是 97 - 122,小写字母与大写字母的编码之间也存在对应关系,同一字母的大小写编码差值为 32,这使得在编程中实现字母大小写转换变得容易,通过简单的加减运算即可实现。
    • 标点符号和特殊字符:包含各种常见标点符号和特殊字符,如逗号(, ,编码 44)、句号(. ,编码 46)、感叹号(! ,编码 33)、加号(+ ,编码 43)、减号(- ,编码 45)等,这些字符在文本编辑、数学运算和程序编写等场景中发挥着重要作用。

应用领域

  • 文本处理:几乎所有文本编辑软件都支持 ASCII 编码,在纯英文文本的编辑、存储和传输中,ASCII 字符集是最基础的编码方式,像常见的 Windows 系统自带的记事本程序,默认保存的纯英文文本就是以 ASCII 编码存储。
  • 编程语言:众多编程语言,如 C、C++、Java、Python 等,在处理基本字符和字符串时,都以 ASCII 编码为基础。例如在 C 语言中,字符常量就是用 ASCII 码来表示的,程序员可以直接使用字符的 ASCII 码值进行各种操作。
  • 网络通信:在网络通信协议中,ASCII 字符集用于传输简单的文本信息,如 HTTP 协议中的部分头部信息、FTP 协议中的文件名等,都是基于 ASCII 编码进行传输和解析的。

局限性

  • 字符种类限制:仅能表示英文字母、数字、部分标点符号和控制字符,无法涵盖世界上其他丰富的语言文字,如中文、日文、阿拉伯文等,这限制了其在多语言环境下的应用。
  • 扩展困难:由于 7 位二进制编码的限制,ASCII 字符集的容量固定为 128 个字符,难以直接扩展以满足不断增长的字符表示需求,这促使了后续如 Unicode 等更强大字符集的诞生。不过,ASCII 字符集作为基础,在新的字符集中仍保持着兼容性,如在 UTF - 8 编码中,ASCII 字符的编码与 ASCII 字符集完全一致 。

GBK 字符集

ASCII 字符集虽然在早期计算机处理英文信息时发挥了重要作用,但随着计算机在全球的广泛应用,其局限性日益凸显。由于 ASCII 仅能表示英文字母、数字和一些基本符号,无法满足众多其他语言文字的编码需求,尤其是像中文这样字符数量庞大、结构复杂的文字体系。为了能够在计算机中处理中文信息,GB 系列字符集应运而生,其中 GBK 是使用较为广泛的一个字符集。

GBK 字符集的诞生背景

随着中文计算机应用的普及,早期的 GB2312 字符集虽然收录了 6000 多个常用汉字和一些符号,但仍不能满足实际需求,很多生僻字、繁体字以及特殊符号无法表示。为了更全面地涵盖中文及相关字符,GBK 字符集在 1995 年制定并公布。GBK 全称为汉字内码扩展规范,它是对 GB2312 的扩展和增强,同时保持了对 GB2312 的兼容性。

编码原理

  • 双字节编码:GBK 采用双字节编码方式,即使用两个字节来表示一个字符。对于 ASCII 字符,GBK 字符集保持了与 ASCII 编码的一致性,使用单字节表示(第一个字节的最高位为 0),这样就保证了对英文等 ASCII 字符的兼容性。而对于汉字和其他非 ASCII 字符,则使用两个字节表示。两个字节的取值范围有一定规定,一般第一个字节(也称高字节)的取值范围是 0x81 - 0xFE,第二个字节(也称低字节)的取值范围是 0x40 - 0xFE(除去 0x7F)。
  • 码位分配:GBK 字符集将码位进行了合理分配。其中,包含了汉字、图形符号等。汉字部分,既有常用的简体字,也有一定数量的繁体字,满足了不同用户的需求。图形符号包括了各种标点符号、数学符号、制表符等,使得在处理中文文本时,各种符号都能得到准确的表示。

字符构成

  • 汉字:GBK 收录了 21003 个汉字,涵盖了大部分常用字、次常用字以及一些生僻字。这些汉字按照部首、笔画等规则进行了排序,方便查找和使用。例如,常见的 “中” 字,在 GBK 编码中是由两个字节组成,其编码值是特定的。通过查询 GBK 字符集的编码表,可以找到每个汉字对应的编码值。
  • ASCII 字符:完全兼容 ASCII 字符集,ASCII 中的英文字母、数字、标点符号等在 GBK 中以单字节形式存在,编码值与 ASCII 一致。这使得在处理包含中英文混合的文本时,不需要额外的转换就能正确识别和处理 ASCII 字符。
  • 图形符号:除了汉字和 ASCII 字符外,GBK 还收录了大量的图形符号。如数学运算符号(+、-、×、÷ 等)、货币符号(¥、$ 等)、制表符号(┌、└、┬ 等)以及一些特殊的图形符号。这些符号在排版、文档编辑等方面有着重要的应用。

与 ASCII 的关系和优势

  • 兼容性:GBK 字符集在设计上充分考虑了与 ASCII 的兼容性。在处理英文文本时,GBK 可以直接使用 ASCII 编码,不需要进行转换,这使得 GBK 能够很好地适应中英文混合的文本环境。例如,在一个包含英文单词和中文句子的文档中,英文部分可以按照 ASCII 规则处理,中文部分按照 GBK 规则处理,整个文本能够被正确地存储和显示。
  • 字符数量优势:相比 ASCII 字符集只能表示 128 个字符,GBK 字符集极大地扩充了字符的表示范围,能够表示 2 万多个汉字和大量的图形符号。这使得 GBK 能够满足中文信息处理的各种需求,无论是日常的文字处理、办公文档还是专业的书籍出版等领域,GBK 都能提供足够的字符支持。

应用场景

  • 中文操作系统:在早期的中文 Windows 操作系统中,GBK 字符集被广泛应用。系统的界面文字、用户输入输出的文本等很多都是基于 GBK 编码的。例如,在 Windows 系统的记事本中,默认的编码方式在处理中文时就可能是 GBK 编码。
  • 中文软件:许多中文软件,如办公软件(WPS、Microsoft Office 等)、文字处理软件(如方正飞腾等排版软件)、编程软件等,都支持 GBK 字符集。在这些软件中编辑、保存和处理中文文档时,GBK 编码是常用的选择之一。
  • 数据库存储:在一些中文数据库中,为了存储和处理中文数据,也会使用 GBK 字符集。例如,早期的一些 MySQL 数据库在处理中文数据时,GBK 是一种常见的字符集配置选项。

局限性

  • 字符集范围有限:尽管 GBK 收录了大量的汉字和字符,但对于一些非常生僻的字、少数民族文字以及一些特殊领域的专业符号,仍然无法完全涵盖。随着对多语言、多字符集支持需求的增加,GBK 的字符集范围显得相对不足。
  • 国际通用性差:GBK 字符集主要是为了满足中文信息处理的需求而设计的,在国际上的通用性不如 Unicode 等国际标准字符集。在进行跨国数据交换、多语言支持的系统开发等场景中,GBK 字符集可能会遇到兼容性问题,需要进行字符集转换等额外操作。

Unicode 字符集

GBK 字符集在中文信息处理方面发挥了重要作用,它通过双字节编码扩展了字符表示范围,解决了中文等字符在计算机中的编码问题,并且兼容 ASCII 字符集。然而,GBK 仍存在明显的局限性,它主要面向中文及部分亚洲语言,对于全球众多其他语言和符号无法提供支持,而且不同国家和地区都有各自的字符集标准,这在国际信息交流和多语言处理时会引发严重的兼容性问题。
为了打破这种语言和字符编码的壁垒,实现全球所有字符的统一编码,Unicode 字符集应运而生。Unicode 旨在为世界上每一种语言的每一个字符都提供一个唯一的数字编码,无论该字符在何种平台、何种程序以及何种语言中使用,其编码都是一致的。

基本概念

Unicode,也称为统一码、万国码,是一个国际标准字符集。它建立了一个庞大的字符编码空间,涵盖了几乎世界上所有已知的语言文字、符号、象形文字以及表情符号等,为全球范围内的信息交流和处理提供了统一的字符编码基础。

编码空间与字符范围

Unicode 的编码空间非常大,目前其码点范围从 U+0000 到 U+10FFFF,总共可以表示超过 110 万个字符。这个巨大的编码空间被划分为多个平面(Plane),每个平面包含 216 = 65536 个码点:

  • 基本多文种平面(BMP,Basic Multilingual Plane):范围是 U+0000 - U+FFFF,包含了最常用的字符,如拉丁字母、希腊字母、阿拉伯字母、汉字(包括简体和繁体)、日文假名、韩文等,以及常见的标点符号和符号。大部分日常使用的字符都位于这个平面。
  • 辅助平面(Supplementary Planes):除了基本多文种平面外,还有 16 个辅助平面,范围从 U+10000 - U+10FFFF。这些平面用于表示一些生僻字符、历史文字、专业符号以及大量的表情符号等。
  1. 编码实现方式
    虽然 Unicode 定义了字符与码点的对应关系,但在实际存储和传输中,需要将这些码点转换为具体的二进制数据,这就涉及到不同的编码实现方式,常见的有 UTF - 8、UTF - 16 和 UTF - 32:
  • UTF - 8(8 - bit Unicode Transformation Format)
    • 可变长编码:UTF - 8 是一种可变长度的编码方式,它使用 1 - 4 个字节来表示一个字符。对于 ASCII 字符(码点范围 U+0000 - U+007F),UTF - 8 使用 1 个字节表示,且编码与 ASCII 码完全相同,这保证了对 ASCII 字符集的兼容性;对于常用的汉字等字符(码点范围一般在 U+4E00 - U+9FFF),UTF - 8 使用 3 个字节表示;对于一些生僻字符或特殊符号,可能会用 4 个字节表示。
    • 优点:由于其可变长的特性,在存储和传输以 ASCII 字符为主的文本时非常高效,节省存储空间,同时又能支持所有的 Unicode 字符。因此,UTF - 8 在互联网上得到了广泛应用,是网页、电子邮件等数据传输中最常用的编码方式。
  • UTF - 16(16 - bit Unicode Transformation Format)
    • 固定 / 可变长结合:UTF - 16 使用 2 个或 4 个字节来表示一个字符。对于基本多文种平面(BMP)内的字符,UTF - 16 使用 2 个字节表示;对于辅助平面的字符,则使用 4 个字节(由一对代理对表示)。
    • 应用场景:在一些操作系统和编程语言中,如 Windows 操作系统的内部字符表示、Java 编程语言中的char类型(基于 UTF - 16),常使用 UTF - 16 编码。
  • UTF - 32(32 - bit Unicode Transformation Format)
    • 固定长度编码:UTF - 32 使用固定的 4 个字节来表示每个 Unicode 字符,无论该字符的码点大小如何。这种编码方式简单直接,编码和解码过程相对容易,但会占用较多的存储空间。
    • 使用较少:由于其空间效率较低,在实际应用中使用相对较少,主要用于对编码效率要求不高,但对编码处理简单性要求较高的场景。

与 GBK 的比较及优势

  • 字符覆盖范围:GBK 主要针对中文及部分亚洲语言进行编码,而 Unicode 则涵盖了全球所有语言和符号,具有更广泛的字符覆盖范围。使用 Unicode 可以轻松处理多种语言混合的文本,无需考虑不同字符集之间的转换问题。
  • 兼容性和通用性:GBK 在国际上的通用性较差,不同国家和地区的字符集标准差异较大,在跨国数据交换和多语言系统开发中容易出现兼容性问题。而 Unicode 是国际标准字符集,得到了全球范围内的广泛支持,在各种操作系统、编程语言、软件和网络协议中都能良好兼容,大大提高了信息交流的便利性。

应用领域

  • 互联网:在互联网领域,Unicode 是主流的字符编码方式。网页通常使用 UTF - 8 编码,以确保不同语言的内容都能正确显示。各种网络应用、社交媒体平台等也都广泛采用 Unicode 来处理多语言信息。
  • 操作系统:现代操作系统如 Windows、Linux、macOS 等都支持 Unicode 字符集,能够处理各种语言的输入、显示和存储。用户可以在操作系统中使用不同语言的输入法输入文字,并且操作系统能够正确显示和处理这些文字。
  • 编程语言:大多数编程语言都对 Unicode 提供了良好的支持。例如,Python 3 默认使用 Unicode 字符串,开发者可以方便地处理各种语言的文本数据;Java 使用 UTF - 16 编码的char类型来表示字符,也能很好地支持多语言开发。
  • 数据库:数据库系统如 MySQL、Oracle 等都支持 Unicode 字符集,允许用户存储和查询各种语言的数据,确保数据在不同语言环境下的一致性和准确性。

ASCII、GBK、Unicode 代表了字符集发展的不同阶段,从最初满足英文处理需求,到满足中文等特定语言需求,再到实现全球字符统一编码,它们不断推动着计算机信息处理技术的发展。

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

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

相关文章

List的模拟实现(2)

前言 上一节我们讲解了list的基本功能,那么本节我们就结合底层代码来分析list是怎么实现的,那么废话不多说,我们正式进入今天的学习:) List的底层结构 我们先来看一下list的底层基本结构: 这里比较奇怪的…

RT-Thread+STM32L475VET6实现红外遥控实验

文章目录 前言一、板载资源介绍二、具体步骤1. 确定红外接收头引脚编号2. 下载infrared软件包3. 配置infrared软件包4. 打开STM32CubeMX进行相关配置4.1 使用外部高速时钟,并修改时钟树4.2 打开定时器16(定时器根据自己需求调整)4.3 打开串口4.4 生成工程 5. 打开HW…

速通HTML

HTML基础 1.快捷键 基于VS Code记录编写过程中常用的快捷键 功能快捷键生成HTML基本骨架!回车保存代码CtrlS在浏览器运行代码AltB注释Ctrl/缩进Tab取消缩进ShiftTab收起侧边栏CtrlB 先保存,再在浏览器运行才能刷新 2.标签 标签作用h1——h6双标签标题标签&#…

WebXR教学 01 基础介绍

什么是WebXR? 定义 XR VR AR Web上使用XR技术的API WebXR 是一组用于在 Web 浏览器中实现虚拟现实(VR)和增强现实(AR)应用的技术标准。它由 W3C 的 Immersive Web 工作组开发,旨在提供跨设备的沉浸式体验…

IRI 2016 模型在线版 MATLAB

IRI官网:International Reference Ionosphere IRI-2016在线计算:IRI 2016 | CCMC 官方提供的MATLAB代码需要联网读取IRI网页数据: 下载需要注册账号,没有注册账号的自行注册,下载好后解压是这样的: 下载I…

数据结构系列一:初识集合框架+复杂度

前言 数据结构——是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机专业的基础课程,但也是一门不太容易学好的课,它当中有很多费脑子的东西,之后在学习时,你若碰到了困惑或不解的地方 都是很正常的反应&…

智慧物业平台(springboot小程序论文源码调试讲解)

第4章 系统设计 用户对着浏览器操作,肯定会出现某些不可预料的问题,但是不代表着系统对于用户在浏览器上的操作不进行处理,所以说,要提前考虑可能会出现的问题。 4.1 系统设计思想 系统设计,肯定要把设计的思想进行统…

2024年国赛高教杯数学建模A题板凳龙闹元宵解题全过程文档及程序

2024年国赛高教杯数学建模 A题 板凳龙闹元宵 原题再现 “板凳龙”,又称“盘龙”,是浙闽地区的传统地方民俗文化活动。人们将少则几十条,多则上百条的板凳首尾相连,形成蜿蜒曲折的板凳龙。盘龙时,龙头在前领头&#x…

在PyCharm中集成AI编程助手并嵌入本地部署的DeepSeek-R1模型:打造智能开发新体验

打造智能开发新体验:DeepSeekPycharmollamaCodeGPT 目录 打造智能开发新体验:DeepSeekPycharmollamaCodeGPT前言一、什么是ollama?二、如何使用1.进入ollama官方网站:2.点击下载ollama安装包3.根据默认选项进行安装4.安装成功5.打开命令提示符…

软件测试的基础入门(一)

文章目录 一、什么是软件测试?(1)生活中的测试案例(2)代码中的测试示例(3)软件测试的定义 二、软件测试的重要性三、测试工程师(1)定义(2)分类&am…

Linux版本控制器Git【Ubuntu系统】

文章目录 **前言**一、版本控制器二、Git 简史三、安装 Git四、 在 Gitee/Github 创建项目五、三板斧1、git add 命令2、git commit 命令3、git push 命令 六、其他1、git pull 命令2、git log 命令3、git reflog 命令4、git stash 命令 七、.ignore 文件1、为什么使用 .gitign…

20250221 NLP

1.向量和嵌入 https://zhuanlan.zhihu.com/p/634237861 encoder的输入就是向量,提前嵌入为向量 二.多模态文本嵌入向量过程 1.文本预处理 文本tokenizer之前需要预处理吗? 是的,文本tokenizer之前通常需要对文本进行预处理。预处理步骤可…

Spring Boot 3 整合 Spring Cloud Gateway 工程实践

引子 当前微服务架构已成为中大型系统的标配,但在享受拆分带来的敏捷性时,流量治理与安全管控的复杂度也呈指数级上升。因此,我们需要构建微服务网关来为系统“保驾护航”。本文将会通过一个项目(核心模块包含 鉴权服务、文件服务…

flutter项目构建常见问题

最近在研究一个验证码转发的app,原理是尝试读取手机中对应应用的验证码进行自动转发。本次尝试用flutter开发,因为之前没有flutter开发的经验,遇到了诸多环境方面的问题,汇总一些常见的问题如下。希望帮助到入门的flutter开发者&a…

Classic Control Theory | 12 Real Poles or Zeros (第12课笔记-中文版)

笔记链接:https://m.tb.cn/h.Tt876SW?tkQaITejKxnFLhttps://m.tb.cn/h.Tt876SW?tkQaITejKxnFL

图解感知机(Perceptron)

目录 1.感知机(Perceptron)介绍 2.网络结构与工作原理 3.模型工作示例 4.总结 1.感知机(Perceptron)介绍 感知机(Perceptron)是最早的人工神经网络模型之一,由弗兰克罗森布拉特(…

多旋翼+航模+直升机:多型号无人机飞行表演技术详解

多旋翼、航模、直升机等多种型号的无人机飞行表演技术,是现代科技与艺术的完美结合,它们通过精密的编程、高效的通信、先进的定位与导航技术,以及复杂的编队控制算法,共同呈现出令人震撼的视觉效果。以下是对这些无人机飞行表演技…

deepseek 导出导入模型(docker)

前言 实现导出导入deepseek 模型。deepseek 安装docker下参考 docker 导出模型 实际生产环境建议使用docker-compose.yml进行布局,然后持久化ollama模型数据到本地参考 echo "start ollama" docker start ollama#压缩容器内文件夹,然后拷贝…

【MySQL】表的增删查改(CRUD)(上)

个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 CRUD:Create(新增数据)、Retrieve(查询数据)、Update(修改数据)、Delete(修改数据…

Win11作为宿主机,运行VMware 总没有网络

问题: 移动了VMware到新宿主机上后,虚拟机无法连接网络,其实会显示一个圆圈的图标,这是连接上的图标。 造成这个错误的原因是多种多样的。 用下面的方法来查排查错误。 1.控制面板-> 网络连接 安装好虚拟机后,会…