在上一篇文章中,我们了解了数字字符的起源ASCII码。虽然ASCII很好,但128个字符的空间对于全球语言来说显然不够。
今天,我们将讨论Unicode,这是一个超越ASCII的巨大承诺,整合了韩文、汉字、阿拉伯文以及表情符号等世界上所有的字符。
在互联网刚起步的时代,当你访问其他国家的网站时,常常会看到乱码,页面上都被像□这样的符号覆盖。这种现象被称为'Mojibake'。
原因很简单。各国、各语言领域使用不同的编码表。相同的二进制数据可能有的计算机会解读为“这是韩文”,而有的计算机则解读为“这是西欧语言”。
为了解决这个数字巴别塔的混乱,出现了救世主Unicode。

1. Unicode是什么?
Unicode是“Universal Code”的缩写,是一个国际标准,为全球所有字符分配唯一编号(Code Point)。
如果ASCII码是从0到127编号,那么Unicode实际上将这个范围扩展到无限。目前Unicode已注册超过14万种字符,其中包括现存的语言、古代象形文字、乐谱符号,以及我们日常使用的表情符号(Emoji)。
代码点(Code Point)
Unicode为每个字符分配以U+开头的十六进制编号。
-
拉丁字母 'A': $U+0041$ (与ASCII码相同)
-
韩文 '가': $U+AC00$
-
汉字 '日': $U+65E5$
-
表情符号 '😀': $U+1F600$
现在,全球所有计算机收到 $U+1F600$ 这个信号时,无论语言设置如何,都能想到同样的笑脸(😀)。
2. Unicode和UTF-8是同一个东西吗?
很多人对此感到困惑。“Unicode” 和常见的“UTF-8”并不相同。理解这两者之间的关系是今天文章的核心。
-
Unicode: 将字符和数字连接起来的“地图(Map)”。 (抽象的约定)
-
UTF-8(编码): 将这些数字在计算机内存中实际存储的“包装方式(Method)”。
如果说Unicode是为全球所有物品分配ID的'目录',那么UTF-8就是为了将这些物品装上卡车而进行的“包装技术”。
3. 为什么UTF-8成为标准?
将Unicode字符存储在计算机中的传统编码方式有UTF-16、UTF-32等多种。但目前网络世界中超过98%都使用UTF-8。
UTF-8的成功在于其“可变长度(Variable Width)”的天才效率,根据字符种类分配不同的存储空间(Byte)。
| 字符种类 | 示例 | Unicode编号 | UTF-8存储大小 | 特点 |
|---|---|---|---|---|
| 基本拉丁文 | A | $U+0041$ | 1 Byte | 与ASCII码100%兼容 |
| 中东/欧洲语言 | Ω, ¶ | $U+03A9$ | 2 Bytes | 拉丁扩展、希腊语等 |
| CJK(汉字、日文、韩文) | 한, 中, あ | $U+D55C$ | 3 Bytes | 大部分亚洲字符 |
| 表情符号/古代语言 | 🚀 | $U+1F680$ | 4 Bytes | 跨越平面的字符 |
UTF-8的优势
-
ASCII兼容性: 保存英文文档时,与ASCII码大小相同,完全兼容现有系统。
-
效率: 常用英文/数字使用1字节存储,而复杂字符则使用更多字节,以优化整体容量。
4. 开发者在处理Unicode时需注意的事项
与仅由1字节(ASCII)组成的时代不同,在处理Unicode环境时,计算“字符串长度”时需要特别注意。
-
从内存角度(Byte):'A'是1,'한'是3。
-
从字符角度(Character):'A'是1个字符,'한'也是1个字符。
如果按照过去的方式切割或存储字符串,可能会导致多字节字符(韩文、汉字等)被截断,从而导致数据损坏。因此,现代编程语言通常内置支持自动处理这种Unicode的库。
总结
-
Unicode: 为全球所有字符分配唯一编号(Code Point)的国际标准协议。
-
目的: 统一各语言领域不同的编码方式,以解决字符乱码(Mojibake)现象。
-
UTF-8: 最有效地存储Unicode的方式。英文使用1字节,韩/中/日字符使用3字节进行可变存储。
Unicode不仅仅是一个技术标准,更是数字时代最包容的基础设施,使全球能够无语言障碍地进行信息交换。
🚀 下篇文章预告
既然我们了解了文本的存储方式(编码),接下来是时候学习如何更智能地处理数据了。“图像是如何以0和1存储的?” 我将非常简单地讲解像素、分辨率以及RGB颜色的原理。
👇 推荐阅读
如果这篇文章对你有所帮助,请订阅以获取更多IT技术内容!
目前没有评论。