认识
在计算机科学中,字符是一个信息单位,它指的是一个书写符号的最小单位。
它可以是个:
- 字母:A, b, Ω, あ
- 数字:1, ②,五
- 标点符号:!,。,、
- 空格:` `
- 控制字符:换行符、退格键(这些在屏幕上不直接显示,但控制文本的格式)
- 其他符号:$, ©, ❤
关键点:字符是一个抽象概念。我们看到的是“A”这个形状,但计算机内部并不直接存储这个形状。
组成
字符
一个抽象的文本单位(如字母‘A’)。
字形
字符的视觉呈现形式(如‘A’的不同字体:A, 𝔄, 𝖠)。
字符集
字符集,其是一个所有可用字符的集合。它定义了“我们有哪些字符”。例如:“这个字符集包含 26 个英文字母、10 个数字和常用标点。”
码位
在字符集中,字符被分配的唯一数字 ID,例如,在 Unicode 中,U+4E2D、……
字符编码
计算机只能处理二进制数字(0 和 1)。因此,我们需要一套规则,将抽象的字符映射成数字,该过程涉及字符编码概念。
其是套规则,将码位与二进制字节的转换规则。其规定了如何将字符集中的每个字符转换成唯一的二进制数字(码位),以及如何存储这些数字。它解决“我们如何用数字表示和存储这些字符”的问题。
ASCII(美国信息交换标准代码)
扩展 ASCII 与本地化编码
- GB2312 / GBK:中国大陆的标准,用于表示简体中文。一个中文字符用两个字节表示。
- BIG5:台湾和香港地区的标准,用于表示繁体中文。
- ISO-8859-1 (Latin-1):用于西欧语言,可以表示法语、西班牙语中的重音字符。
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 / 介绍计算机中字符的概念