什么是 UTF-8 编码?非程序员指南,您是否曾想过,互联网如何在同一页面上显示所有语言的文本,无论是英文博客文章、日文 Instagram 帖子还是阿拉伯语产品描述?这是我们大多数人(包括我)认为理所当然的事情,但这种无缝通信的核心却是一个沉默的英雄:UTF-8 编码。
通过本免费指南了解如何重新设计您的网站。
UTF-8 对互联网如此重要,以至于它是基础的一部分。它是 HTTP 中的“T”,是 HTML 的支柱,也是从 URL 到病毒式社交媒体帖子再到营销文案等一切事物的无名推动者。没有它,网络就不会成为我们今天所知道的全球互联空间。
在我开始之前,我建议你先熟悉一下HTML 的基础知识,并准备好探索一些简单的计算机科学概念。让我们一起揭开 UTF-8 的神秘面纱。
目录
什么是 UTF-8?
UTF-8:Web 开发中的字符集
UTF-8 和 UTF-16 之间的区别
什么是 UTF-8?
UTF-8 是 Unicode 的编码系统。UTF-8 代表“Unicode 转换格式 – 8 位”。它可以将任何 Unicode 字符转换为匹配的唯一二进制字符串,也可以将二进制字符串转换回 Unicode 字符。
为了了解有关 UTF-8 的所有内容,我将首先带您了解基础知识。
计算机如何存储信息
为了存储信息,计算机使用二进制系统。在二进制中,所有数据都以 1 和 0 的序列表示。二进制的最基本单位是位,即单个 1 或 0。二进制的下一个最大单位是字节,由 8 位组成。字节的一个例子是“01101011”。
你遇到的每一种数字资产——从软件到移动应用程序到网站到 Instagram 故事——都是建立在这种字节系统之上的,这些字节以计算机可以理解的方式串联在一起。
当我们提到文件大小时,我们指的是字节数。例如,1 千字节大约等于 1000 字节,1 千兆字节大约等于 10 亿字节。
文本是计算机存储和处理的众多资产之一。文本由单个字符组成,每个字符在计算机中都由一串位表示。这些字符串组合起来形成数字单词、句子、段落、浪漫小说等。
重新设计网站的终极工作手册
指导+模板可简化您的下一个网站重新设计项目。
四部分重新设计规划指南
重新设计的预算模板
网站重新设计审计模板
还有更多!
美国信息交换标准代码 (ASCII) 是早期标准化的文本编码系统。编码是将人类语言中的字符转换为计算机可以处理的二进制序列的过程。
ASCII 的库包含拉丁字母表中的每个大写和小写字母(A、B、C……)、从 0 到 9 的每个数字以及一些常见符号(如 /、! 和 ?)。它为每个字符分配一个唯一的三位数代码和一个唯一的字节。
ASCII 字符表
下表显示了 ASCII 字符及其相关代码和字节的示例。
特点 | ASCII 码 | 字节 |
一个 | 065 | 01000001 |
一个 | 097 | 01100001 |
乙 | 066 | 01000010 |
b | 098 | 01100010 |
是 | 090 | 01011010 |
是 | 122 | 01111010 |
0 | 048 | 00110000 |
9 | 057 | 00111001 |
! | 033 | 00100001 |
? | 063 | 00111111 |
就像语言中的字符组合成单词和句子一样,二进制代码在文本文件中也是如此。因此,用 ASCII 二进制表示的句子“敏捷的棕色狐狸跳过了懒狗”将是:
01010100 01101000 01100101 00100000 01110001 01110101 01101001 01100011 01101011 00100000 01100010 01110010 01101111 01110111 01101110 00100000 01100110 01101111 01111000 00100000 01101010 01110101 01101101 01110000 01110011 00100000 01101111 01110110 01100101 01110010 00100000 01110100 01101000 01100101 00100000 01101100 01100001 01111010 01111001 00100000 01100100 01101111 01100111 00101110
这对我们人类来说意义不大,但它却是计算机的衣食父母。
一个字符在 ASCII 中可以用多少种方式表示?
ASCII 可以表示的字符数受限于可用的唯一字节数,因为每个字符占用一个字节。
让我们来算一算:将八个 1 和 0 组合在一起有 256 种不同的方法。这给了我们 256 个不同的字节,或者说 256 种用 ASCII 表示字符的方法。
当 ASCII 于 1960 年推出时,这是可以的,因为开发人员只需要 128 个字节就可以表示他们需要的所有英文字符和符号。
但随着计算在全球范围内的扩张,计算机系统开始存储除英语以外的语言的文本,其中许多使用非 ASCII 字符。
新的系统被创建来将其他语言映射到同一组 256 个唯一字节,但拥有多个编码系统效率低下且容易造成混乱。开发人员需要一种更好的方法,用一个系统对所有可能的字符进行编码。
Unicode:一种存储所有符号的方法
Unicode 来了!Unicode是一种解决 ASCII 空格问题的编码系统。与 ASCII 一样,Unicode 为每个字符分配一个唯一的代码,称为代码点。
然而,Unicode 的更复杂系统可以产生超过一百万个代码点,足以解释任何语言的每个字符。
Unicode 现在是所有人类语言编码的通用标准。没错,它甚至包括表情符号。
Unicode 字符表
现在,我将向您提供一些文本字符及其匹配代码点的示例。每个代码点都以“U”(代表“Unicode”)开头,后跟一串唯一的字符来表示该字符。
特点 | 代码点 |
一个 | U+0041 |
一个 | U+0061 |
0 | U+0030 |
9 | U+0039 |
! | U+0021 |
Ø | U+00D8 |
凯 | U+0683 |
ಚ | U+0C9A |
𠜎 | U+2070E |
😁 | U+1F601 |
如果您想了解代码点是如何生成的以及它们在 Unicode 中的含义,请查看此深入解释。
因此,现在有了 Unicode,我就有了一个标准化的方法,可以在一个库中表示每种人类语言使用的每个字符。这解决了不同语言使用多个标签系统的问题——地球上的任何计算机都可以使用 Unicode。
但 Unicode 本身并不能以二进制形式存储单词。计算机需要一种方法将 Unicode 转换为二进制,以便将其字符存储在文本文件中。
这就是 UTF-8 的用武之地。
UTF-8:Web 开发中的字符集
UTF-8 是当今互联网上使用最广泛的字符编码方法,也是 HTML5 的默认字符集。超过 98% 的网站(可能包括您自己的网站)都以这种方式存储字符。
此外,网络上常见的数据传输方法(例如XML和JSON)都采用 UTF-8 标准进行编码。
由于它现在是网络上编码文本的标准方法,因此您网站的所有页面和数据库都应使用 UTF-8。
专业提示:内容管理系统或网站构建器默认会以 UTF-8 格式保存您的文件,但仍然值得验证您是否遵循此最佳做法 — 尤其是在重新设计网站的过程中。重新设计项目提供了一个很好的机会来审核您网站的编码设置并确保它们符合现代网络标准。
重新设计网站的终极工作手册
指导+模板可简化您的下一个网站重新设计项目。
四部分重新设计规划指南
重新设计的预算模板
网站重新设计审计模板
还有更多!
立即免费下载
了解更多
如何在 HTML 中表示 UTF-8?
使用 UTF-8 编码的文本文件必须向处理它们的软件表明这一点。否则,软件将无法正确地将二进制文件转换回字符。在 HTML 文件中,您可能会在顶部附近看到如下代码字符串:
<meta charset=“UTF-8”>
这告诉浏览器该 HTML 文件采用 UTF-8 编码,以便浏览器可以将其转换回可读的文本。
UTF-8 字符表
下面是与上面相同的字符表,每个字符都添加了 UTF-8 字符集输出。请注意,有些字符仅用一个字节表示,而其他字符则使用更多字节。
特点 | 代码点 | UTF-8 二进制编码 |
一个 | U+0041 | 01000001 |
一个 | U+0061 | 01100001 |
0 | U+0030 | 00110000 |
9 | U+0039 | 00111001 |
! | U+0021 | 00100001 |
Ø | U+00D8 | 11000011 10011000 |
凯 | U+0683 | 11011010 10000011 |
ಚ | U+0C9A | 11100000 10110010 10011010 |
𠜎 | U+2070E | 11110000 10100000 10011100 10001110 |
😁 | U+1F601 | 11110000 10011111 10011000 10000001 |
了解 UTF-8 字符到字节的转换
我在上表中说明了为什么有些字符占用一个字节,而其他字符占用更多字节。但是为什么 UTF-8 会将某些字符转换为一个字节,而将其他字符转换为最多四个字节呢?
为了节省内存。
UTF-8 通过使用较少的空间来表示更常见的字符(即 ASCII 字符),从而减少了文件大小,同时允许存储大量不太常见的字符。这些不太常见的字符被编码为两个或更多字节,但如果存储量较少,这是可以接受的。
空间效率是 UTF-8 编码的一个关键优势。如果每个 Unicode 字符都用四个字节表示,那么用英文编写的文本文件的大小将是使用 UTF-8 编码的相同文件的四倍。
除了 UTF-8 之外还有其他编码系统吗?
除了 UTF-8 之外,Unicode 还有其他编码系统,但 UTF-8 是独一无二的,因为它以单字节为单位表示字符。请记住,一个字节由 8 位组成,因此其名称中带有“-8”。
更具体地说,UTF-8 将代码点(在 Unicode 中表示单个字符)转换为一组一到四个字节。Unicode 库中的前 128 个字符(我在上面解释 ASCII 时谈到的字符)表示为一个字节。Unicode 库中稍后出现的字符被编码为两个字节、三个字节,最终是四个字节的二进制单元。
UTF-8 和 UTF-16 之间的区别
正如我所提到的,UTF-8 并不是 Unicode 字符的唯一编码方法 — 还有 UTF-16。这些方法在存储字符所需的字节数上有所不同:
UTF-8 将字符编码为一、二、三或四个字节的二进制字符串。
UTF-16 将 Unicode 字符编码为两字节或四字节的字符串。
在 UTF-8 中,一个字符的最小二进制表示是一个字节,或者八位。
在 UTF-16 中,字符的最小二进制表示形式是两个字节,即十六位。
UTF-8 和 UTF-16 都可以将 Unicode 字符转换为计算机可理解的二进制字符,然后再转换回来。但它们彼此不兼容。
UTF-8 与 UTF-16 字符表
UTF-8 和 UTF-16 系统都使用不同的算法将代码点映射到二进制字符串。如下面的字符表所示,任何给定字符的二进制输出对于 UTF-8 和 UTF-16 来说都会有所不同:
特点 | 代码点 | UTF-8 二进制编码 |
一个 | U+0041 | 01000001 |
一个 | U+0061 | 01100001 |
0 | U+0030 | 00110000 |
9 | U+0039 | 00111001 |
! | U+0021 | 00100001 |
Ø | U+00D8 | 11000011 10011000 |
凯 | U+0683 | 11011010 10000011 |
ಚ | U+0C9A | 11100000 10110010 10011010 |
𠜎 | U+2070E | 11110000 10100000 10011100 10001110 |
😁 | U+1F601 | 11110000 10011111 10011000 10000001 |
何时应使用 UTF-8?
在大多数网站上,UTF-8 编码比 UTF-16 更受欢迎,因为它占用的内存更少。
回想一下,UTF-8 仅用一个字节对每个 ASCII 字符进行编码。UTF-16 必须用两个或四个字节对这些相同的字符进行编码。这意味着用 UTF-16 编码的英文文本文件的大小至少是用 UTF-8 编码的相同文件的两倍。
使用 UTF-8 字符集的另一个好处是它与 ASCII 向后兼容。Unicode 库中的前 128 个字符与 ASCII 库中的字符匹配,UTF-8 将这 128 个 Unicode 字符转换为与 ASCII 相同的二进制字符串。因此,UTF-8 可以毫无问题地将 ASCII 格式的文本文件转换为人类可读的文本。
何时应使用 UTF-16?
UTF-16 仅在某些非英语网站上比 UTF-8 更有效率。
如果网站使用的语言中包含 Unicode 库中较靠后的字符,则 UTF-8 会将所有字符编码为四个字节,而 UTF-16 可能会将许多相同的字符编码为仅两个字节。
专业提示:如果您的页面充满 ABC 和 123,我建议坚持使用 UTF-8。
以下是我对 UTF-8 编码为何重要以及如何重要的总结
深入研究 UTF-8 让我意识到它对于我们每天享受的无缝数字体验有多么重要。
以下是我所讨论内容的总结:
计算机以二进制(1 和 0)存储数据(包括文本字符)。
ASCII 是一种早期的编码方式,即将字符映射到二进制代码,以便计算机可以存储它们。但是,ASCII 没有为非拉丁字符和数字提供足够的空间以二进制表示。
Unicode 就是针对这个问题的解决方案。Unicode 为每种人类语言中的每个字符分配一个唯一的“代码点”。
UTF-8 是一种 Unicode 字符编码方法。
UTF-8 获取给定 Unicode 字符的代码点并将其转换为二进制字符串。它还执行相反的操作,读取二进制数字并将其转换回字符。
UTF-8 因其能够有效地存储任何字符集的文本而成为互联网上使用最广泛的编码方法。
UTF-16 是另一种编码方法,但存储文本文件效率较低(某些非英语语言编写的文件除外)。
把你的新知识运用起来
撰写这篇关于 UTF-8 字符集的文章是一段令人着迷的旅程。和大多数人一样,我一直理所当然地认为,无论使用哪种语言、脚本或平台,互联网上的文本都是“有效的”。
浏览或设计网站时,您无需考虑 Unicode 翻译,而这正是重点所在 — 创建一个适用于所有语言和网络浏览器的无缝文本处理系统。如果运行良好,您不会注意到它。
如果您发现您网站的页面占用了过多的空间,或者您的文本中充斥着 ▢ 和 �,我建议您将新学到的 UTF-8 知识付诸实践。让我们继续构建更好、更易于访问的互联网 — 每次使用一个 UTF-8 字符。
编者注:这篇文章最初发表于 2020 年 8 月,现已更新以提高全面性。