「CHARACTER」- 字符 | Character (Computing)

认识

在计算机科学中,字符是一个信息单位,它指的是一个书写符号的最小单位。

它可以是个:

  • 字母:A, b, Ω, あ
  • 数字:1, ②,五
  • 标点符号:!,。,、
  • 空格:` `
  • 控制字符:换行符、退格键(这些在屏幕上不直接显示,但控制文本的格式)
  • 其他符号:$, ©, ❤

关键点:字符是一个抽象概念。我们看到的是“A”这个形状,但计算机内部并不直接存储这个形状。

组成

字符

一个抽象的文本单位(如字母‘A’)。

字形

字符的视觉呈现形式(如‘A’的不同字体:A, 𝔄, 𝖠)。

字符集

字符集,其是一个所有可用字符的集合。它定义了“我们有哪些字符”。例如:“这个字符集包含 26 个英文字母、10 个数字和常用标点。”

码位

在字符集中,字符被分配的唯一数字 ID,例如,在 Unicode 中,U+4E2D、……

字符编码

计算机只能处理二进制数字(0 和 1)。因此,我们需要一套规则,将抽象的字符映射成数字,该过程涉及字符编码概念。

其是套规则,将码位与二进制字节的转换规则。其规定了如何将字符集中的每个字符转换成唯一的二进制数字(码位),以及如何存储这些数字。它解决“我们如何用数字表示和存储这些字符”的问题。

ASCII(美国信息交换标准代码)

计算机早期。非常小,仅包含 128 个字符(0-127)。包括英文字母(大小写)、数字、基本标点以及控制字符(如换行、响铃)。编码方式:每个字符用一个 7 位的字节(实际上是个 8 位字节的后 7 位)表示。局限性:无法表示英语之外的任何语言,如中文、法语的带重音符号的字母等。

扩展 ASCII 与本地化编码

为了支持更多语言,各个国家和地区在 ASCII 的 128 个字符之后,利用那个闲置的最高位,创造了代码页。

例如:
  • GB2312 / GBK:中国大陆的标准,用于表示简体中文。一个中文字符用两个字节表示。
  • BIG5:台湾和香港地区的标准,用于表示繁体中文。
  • ISO-8859-1 (Latin-1):用于西欧语言,可以表示法语、西班牙语中的重音字符。

问题(乱码的根源):这些编码方案是互不兼容的。同样一个数字,在不同的编码方案下可能代表完全不同的字符。如果你用 GBK 编码去打开一个用 BIG5 编码的文本,就会看到一堆乱码。

Unicode(统一码、万国码)— 现代的解决方案

为了解决混乱的局面,Unicode 应运而生。它的目标是为世界上所有书写系统中的每一个字符提供一个唯一的数字标识符。

  • 核心思想:字符集与字符编码分离。
    • 字符集(Unicode 标准):它定义了一个巨大的字符表,为每个字符分配一个唯一的码位。针对码位,其通常写作 `U+XXXX` 的形式,例如:`A` -> U+0041,`中` -> U+4E2D,`😊` -> U+1F60A
    • 字符编码(如 UTF-8, UTF-16):这些是实现方案,规定了如何将这些码位(U+XXXX)转换成实际的二进制字节流。

全角 and 半角

全角的诞生 – 扩展编码的产物。当计算机传入亚洲国家(如中国、日本、韩国)后,数量庞大的象形文字无法被仅 128 个位置的 ASCII 码容纳。为了解决这个问题,各国制定了各自的扩展编码标准(如中国的 GB2312、GBK)。在这些标准中,原本的 ASCII 字符保持半角(1 Byte),而新加入的汉字和为了与汉字宽度匹配的标点符号则被定义为全角(占用 2 Byte 的存储空间)。

为了统一全球所有字符的编码,Unicode(万国码)诞生了。在 Unicode 中,每个字符(无论是英文‘A’还是中文‘中’)都有一个唯一的码点。全角标点和半角标点是两个不同的字符,拥有不同的 Unicode 码点。

在输入法中,针对“全角”与“半角”概念,其通常指的是不同语言中的标点符号。

组成

字符集 Character Set

GB2312、GBK、GB18030 这几种字符集的主要区别是什么?
Wikipedia/Unified Hangul Code

该部分整理了些常见字符集,并进行了简单介绍。

名称描述
Unified Hangul Code (UHC)/Extended Wansung/Code Page 949是韩语的字符集
GB 2312/GB 2312-80中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称 GB 0,由中国国家标准总局发布,共收录 6763 个汉字。
GBK汉字内码扩展规范,Chinese Internal Code Specification,是微软对 GB2312 的扩展,共收入 21886 个汉字和图形符号。
GB18030国家标准 GB 18030-2005《信息技术中文编码字符集》,共收录汉字 70244 个。

应用

乱码:当用于解码文本的编码方案与当初编码它时使用的方案不一致,就会产生乱码。解决方法是确保使用正确的编码。

现代开发:在今天的软件开发中,最佳实践是始终使用 UTF-8 编码。这能最大程度地避免跨语言、跨平台的字符显示问题。

字符串长度:在编程中,一个字符串的“长度”可能有两种含义:

  • 字节数:存储这个字符串所需的字节数量(在 UTF-8 中,一个中文字符通常是 3 个字节)。
  • 字符数:字符串中包含的抽象字符的数量(一个中文字符是 1 个字符)。

参考

DeepSeek / 介绍计算机中字符的概念