【发布时间】:2019-02-23 01:43:46
【问题描述】:
在 Windows 记事本中创建并以 ASCII 格式保存的 32 个字符的文本文件的大小为 32 个字节。当相同的 32 个字符的文本以 Unicode 保存时,大小增加到 66 个字节。
为什么大小不是 64 字节,因为 16 位 Unicode 字符的大小是 ASCII 字符的两倍?
【问题讨论】:
-
@phuclv:OP说原始文件是ASCII,这意味着它是一个8位字节序列,每个字节的高位设置为0。这足以告诉我们使用 BOM 将其转换为 UTF-16 将产生一个 66 字节的文件。
-
由于历史原因,Windows 上使用的一些常用术语搞砸了。 “ANSI”被错误地用来指代几个 8 位字符集中的任何一个,最常见的是 Windows-1252。 “ASCII”是一个 7 位字符集,几乎总是以 8 位字节存储。 “Unicode”被错误地用来指代 Unicode 的一种特定编码,即带有 BOM 的 UTF-16LE。在 Windows 之外,最常见的 Unicode 编码是 UTF-8(不需要 BOM)。
-
@KeithThompson Windows 使用 UTF-8 的 BOM 将它们与“ANSI”文件区分开来。这不是为了字节顺序标记的目的,因为很多人总是抱怨
-
记事本支持使用系统默认代码页utf8或utf16保存文本文件。 utf16 文件的大小通常是第一个文件的两倍,加上 U+FEFF 字节顺序标记 (BOM) 的 2 个额外字节。这就是任何其他应用程序可以看到它是用 utf16 编码的方式。
标签: file unicode ascii utf-16 notepad