答案是在 UTF-8 中,ASCII 只有 1 个字节,但一般来说,包括英语在内的大多数西方语言在这里和那里都使用一些需要 2 个字节的字符,因此实际百分比会有所不同。当以 UTF-8 编码时,希腊语和西里尔语语言都要求其脚本中每个字符至少 2 个字节。
常见的东方语言要求其字符在 UTF-8 中为 3 个字节,但在 UTF-16 中为 2 个字节。但是请注意,“不常见”的东方字符在 UTF-8 和 UTF-16 中都需要 4 个字节。
3 确实只比 2 大 50%。但这仅适用于单个代码点。它不适用于整个文件。
实际百分比无法精确说明,因为您不知道代码的平衡点是在 1 字节还是 2 字节 UTF-8 范围内,还是在 4 字节 UTF-8 范围内。如果亚洲文本中有空格,那么这只是 UTF-8 的字节,但它是 UTF-16 的昂贵的 2 个字节。
这些事情确实有所不同。您只能在精确文本上获得精确数字,而不是在一般文本上。亚洲文本中的代码点占用 UTF-8 的 1、2、3 或 4 个字节,而在 UTF-16 中,它们每个需要 2 或 4 个字节。
案例分析
比较东京上各种语言的维基百科页面,看看我的意思。即使在东方语言中,仍然有大量的 ASCII 代码。仅此一项就使您的数字波动。考虑:
Paras Lines Words Graphs Chars UTF16 UTF8 8:16 16:8 Language
519 1525 6300 43120 43147 86296 44023 51% 196% English
343 728 1202 8623 8650 17302 9173 53% 189% Welsh
541 1722 9013 57377 57404 114810 59345 52% 193% Spanish
529 1712 9690 63871 63898 127798 67016 52% 191% French
321 837 2442 18999 19026 38054 21148 56% 180% Hungarian
202 464 976 7140 7167 14336 11848 83% 121% Greek
348 937 2938 21439 21467 42936 36585 85% 117% Russian
355 788 613 6439 6466 12934 13754 106% 94% Chinese, simplified
209 419 243 2163 2190 4382 3331 76% 132% Chinese, traditional
461 1127 1030 25341 25368 50738 65636 129% 77% Japanese
410 925 2955 13942 13969 27940 29561 106% 95% Korean
其中每一个都是保存为文本 而不是HTML 的东京维基百科页面。所有文本都在 NFC 中,而不是在 NFD 中。每一列的含义如下:
- Paras 是空白行分隔的文本跨度的数量。
- Lines 是换行符分隔的文本跨度的数量。
- Words 是空格分隔的文本跨度的数量。
- Graphs 是 Unicode 扩展字素簇的数量,有时也称为字形。这些是用户可见的字符。
- Chars 是 Unicode 代码点的数量。这些是或应该是程序员可见的字符。
- UTF16 是文件存储为 UTF-16 时占用的字节数。
- UTF8 是文件存储为 UTF-8 时占用的字节数。
- 8:16 是 UTF-8 大小与 UTF-16 大小的比率,以百分比表示。
- 16:8 是 UTF-16 大小与 UTF-8 大小的比率,以百分比表示。
- 语言是我们在这里讨论的东京页面的哪个版本。
我将这些语言分为西方拉丁语、西方非拉丁语和东方语。观察:
使用拉丁文字的西方语言在从 UTF-8 转换为 UTF-16 时受到严重影响,其中英语受到的影响最大,增长了 96%,而匈牙利语的影响最小,增长了 80%。都是巨大的。
不使用拉丁文字的西方语言仍然受到影响,但只有 15-20%。
东方语言不会像每个人声称的那样在 UTF-8 中受苦!看哪:
- 在韩语和(简体)中文中,UTF-8 仅比 UTF-16 大 6%。
- 在日语中,UTF-8 比 UTF-16 大 29%。
- UTF-8 中的繁体中文实际上比UTF -16 小!事实上,对于这个样本,使用 UTF-16 比使用 UTF-8 的成本高 32%。如果您查看 Lines 和 Words 列,看起来这可能是由于使用了空白。
我希望这能回答你的问题。与以 UTF-16 编码的相同文本相比,以 UTF-8 编码的东方语言的大小根本不会增加 +50% 到 +100%。只有在获取单个代码点时,您才会看到这样的数字,这是一个完全不合理的指标。