为什么 32 字节的 ASCII 文本文件在转换为 Unicode 时会变成 66 字节?



在 Windows 记事本中创建并以 ASCII 格式保存的 32 个字符的文本文件的大小为 32 字节。 当相同的 32 个字符的文本以 Unicode 保存时,大小增加到 66 字节。

为什么大小不是 64 字节,因为 16 位 Unicode 字符的大小是 ASCII 字符的两倍?

Unicode 只是一个字符,没有 16 位字符,因为它不是一组未存储在任何地方的字符映射。为了表示Unicode,有UTF-8,UTF-16和UTF-32以及许多其他具有不同代码单元大小的编码。Unicode 不能只用 16 位表示,因为它是一个 21 位字符集。

在不知道原始文件内容的情况下,如果它包含纯 ASCII(即仅低于 128 的代码点(,那是因为字节顺序标记 (BOM( U+FEFF。当您在记事本中保存文件时选择"Unicode"时,它实际上是 UTF-16LE,并将在开头嵌入 2 字节 BOM (0xFF 0xFE( 以指示文件的编码,将其大小增加到 66。记事本中的名称只是令人困惑。事实上,如果您在 U+FFFF 下方输入任何文本并另存为 UTF-16,也会发生同样的事情。如果将纯 ASCII 文件另存为 UTF-8,则由于 3 字节 BOM,长度现在将为 35 字节

必读:每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有任何借口!

最新更新