gpt4 book ai didi

unicode - 在任何时候,以 UTF-8 编码的文本永远不会为我们提供超过以 UTF-16 编码的相同文本的 +50% 的文件大小。真假?

转载 作者:行者123 更新时间:2023-12-03 18:07:35 28 4
gpt4 key购买 nike

我在某处读到(改写):

If we compare a UTF-8 encoded file VS a UTF-16 encoded file, At some times, the UTF-8 file may give a 50% to 100% larger file size



我说这篇文章是错误的,因为 是否正确?任何时候 , 以 UTF-8 编码的文本将 从不给我们 UTF-16 编码的相同文本的超过 50% 的文件大小?

最佳答案

答案是在 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% 的增加。只有在获取单个代码点时,您才会看到这样的数字,这是一个完全不合理的指标。

    关于unicode - 在任何时候,以 UTF-8 编码的文本永远不会为我们提供超过以 UTF-16 编码的相同文本的 +50% 的文件大小。真假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883434/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com