什么是 UTF-8?UTF-8 与 UTF-16有什么不同?

发布时间:2021-07-26 11:35:47

utf-8和utf-16.jpg

什么是 UTF-8?

UTF-8 代表“Unicode 转换格式 - 8 位”。

二进制:计算机如何存储信息

为了存储信息,计算机使用二进制系统。在二进制中,所有数据都以 1 和 0 的序列表示。二进制的最基本单位是位,它只是一个单一的 1 或 0。二进制的下一个最大单位,一个字节,由 8 位组成。字节的示例是“01101011”。

您遇到的每一种数字应用,从软件到移动应用程序、网站都建立在这个字节系统上,这些字节系统以一种对计算机有意义的方式串在一起。当我们提到文件大小时,我们指的是字节数。例如,千字节大约是一千字节,千兆字节大约是十亿字节。

文本是计算机存储和处理的众多资产之一。文本由单个字符组成,每个字符在计算机中由一串位表示。这些字符串被组合成数字单词、句子、段落等。

ASCII:将符号转换为二进制

美国信息交换标准代码 (ASCII) 是早期的文本标准化编码系统。编码是将人类语言中的字符转换为计算机可以处理的二进制序列的过程。

ASCII 的库包括拉丁字母表中的每个大写和小写字母(A、B、C...)、从 0 到 9 的每个数字以及一些常见符号(如 /、! 和 ?)。它为这些字符中的每一个分配一个唯一的三位数代码和一个唯一的字节。

ASCII 可以表示的字符数受限于可用的唯一字节数,因为每个字符都有一个字节。如果你算一下,你会发现有 256 种不同的方式将 8 个 1 和 0 组合在一起。这为我们提供了 256 个不同的字节,或 256 种方式来表示 ASCII 中的字符。1960 年引入 ASCII 时,这还可以,因为开发人员只需要 128 个字节来表示他们需要的所有英文字符和符号。

但是,随着计算在全球范围内扩展,计算机系统开始以英语以外的语言存储文本,其中许多使用非 ASCII 字符。创建了新系统以将其他语言映射到相同的 256 个唯一字节集,但使用多个编码系统效率低下且令人困惑。开发人员需要一种更好的方法来使用一个系统对所有可能的字符进行编码。

Unicode:一种存储每个符号的方法

Unicode是一种解决 ASCII 空间问题的编码系统。与 ASCII 一样,Unicode 为每个字符分配一个唯一的代码,称为代码点。然而,Unicode 更复杂的系统可以产生超过一百万个代码点,足以解释任何语言中的每个字符。这解决了不同语言的多个标签系统的问题,地球上的任何计算机都可以使用 Unicode。

但是,Unicode 本身并不以二进制形式存储。计算机需要一种将 Unicode 转换为二进制的方法,以便将其字符存储在文本文件中,这就是 UTF-8 的用武之地。

UTF-8编码系统

UTF-8 是 Unicode 的编码系统。它可以将任何 Unicode 字符转换为匹配的唯一二进制字符串,也可以将二进制字符串转换回 Unicode 字符。这就是“UTF”或“Unicode转换格式”的含义。

除了 UTF-8 之外,Unicode 还有其他编码系统,但 UTF-8 是独一无二的,因为它以一字节为单位表示字符。一个字节由八位组成,因此名称中带有“-8”。

更具体地说,UTF-8 将代码点(表示 Unicode 中的单个字符)转换为一组 1 到 4 个字节。Unicode 库中的前 256 个字符(包括我们在 ASCII 中看到的字符)表示为一个字节。后来出现在 Unicode 库中的字符被编码为两字节、三字节和最终四字节的二进制单元。

为什么 UTF-8 会将某些字符转换为 1 个字节,而将其他字符转换为 4 个字节?简而言之,节省内存。通过使用更少的空间来表示更常见的字符(即 ASCII 字符),UTF-8 减少了文件大小,同时允许使用更多的不常用字符。这些不太常见的字符被编码成两个或更多字节,但如果它们被谨慎存储,这是可以的。

空间效率是 UTF-8 编码的一个关键优势。相反,如果每个 Unicode 字符都由四个字节表示,那么用英语编写的文本文件的大小将是用 UTF-8 编码的同一文件的四倍。

UTF-8 编码的另一个好处是它与 ASCII 的向后兼容性。Unicode 库中的前 128 个字符与 ASCII 库中的字符匹配,UTF-8 将这 128 个 Unicode 字符转换为与 ASCII 相同的二进制字符串。因此,UTF-8 可以采用 ASCII 格式的文本文件并将其转换为人类可读的文本,而不会出现问题。

Web 开发中的 UTF-8 字符

UTF-8 是当今互联网上最常用的字符编码方式,也是 HTML5 的默认字符集。超过 95% 的网站(可能包括您自己的网站)以这种方式存储字符。此外,网络上的常见数据传输方法(如XML和JSON)均使用 UTF-8 标准进行编码。

由于它现在是在 Web 上编码文本的标准方法,因此您的所有站点页面和数据库都应使用 UTF-8。默认情况下,内容管理系统或网站构建器会以 UTF-8 格式保存您的文件,但确保您坚持此最佳实践仍然是一个好主意。

使用 UTF-8 编码的文本文件必须向处理它的软件指明这一点。否则,软件将无法正确地将二进制转换回字符。

UTF-8 与 UTF-16

正如我所提到的,UTF-8 不是 Unicode 字符的唯一编码方法,还有 UTF-16。这些方法在存储字符所需的字节数方面有所不同。UTF-8 将字符编码为一、二、三或四字节的二进制字符串。UTF-16 将 Unicode 字符编码为两个或四个字节的字符串。

从他们的名字可以看出这种区别。在 UTF-8 中,字符的最小二进制表示为 1 个字节或 8 位。在 UTF-16 中,字符的最小二进制表示是两个字节或十六位。

UTF-8 和 UTF-16 都可以将 Unicode 字符转换为计算机友好的二进制文件,然后再返回。但是,它们彼此不兼容。这些系统使用不同的算法将代码点映射到二进制字符串,因此任何给定字符的二进制输出看起来与两种方法不同:

在大多数网站上,UTF-8 编码比 UTF-16 更可取,因为它使用更少的内存。回想一下,UTF-8 将每个 ASCII 字符编码为一个字节。UTF-16 必须以两个或四个字节对这些相同的字符进行编码。这意味着使用 UTF-16 编码的英文文本文件的大小至少是使用 UTF-8 编码的同一文件的两倍。

UTF-16 在一些非英文网站上比 UTF-8 更有效率。如果网站使用的语言的字符在 Unicode 库中更远,则 UTF-8 会将所有字符编码为四个字节,而 UTF-16 可能会将许多相同的字符编码为两个字节。尽管如此,如果您的页面充满了 ABC 和 123,请坚持使用 UTF-8。

解码 UTF-8 编码的世界

有很多关于单词的词,所以让我们总结一下我们所涵盖的内容:

计算机将数据(包括文本字符)存储为二进制(1 和 0)。

ASCII 是一种早期的编码方式,或将字符映射到二进制代码以便计算机可以存储它们。但是,ASCII 没有为非拉丁字符和数字以二进制表示提供足够的空间。

Unicode 是解决这个问题的方法。Unicode 为每种人类语言中的每个字符分配一个唯一的“代码点”。

UTF-8 是一种 Unicode 字符编码方法。这意味着 UTF-8 获取给定 Unicode 字符的代码点并将其转换为二进制字符串。它也做相反的事情,读取二进制数字并将它们转换回字符。

UTF-8 是目前互联网上最流行的编码方法,因为它可以有效地存储包含任何字符的文本。

UTF-16 是另一种编码方法,但在存储文本文件时效率较低(除了用某些非英语语言编写的文件)。

声明:本站发布的内容以原创、转载、分享网络内容为主,如有侵权,请联系电话:400-887-2127,邮箱:7221960@qq.com ,我们将会在第一时间删除。文章观点不代表本站立场,如需处理请联系我们。