首先它不是关于操作系统,而是关于你用来读取文件的程序。
在纯 .txt 上,程序必须能够猜测编码,这并不总是可能的,但可能会起作用。在 html 上,编码是作为元数据给出的,所以浏览器不需要这样做。
第二,你知道ASCII吗?你看到它是如何通过数字来表示符号的吗?如果不是,这是你should learn now的第一件事。
接下来,你看出 Unicode 和 UTF-XXX 的区别了吗?你必须清楚,Unicode只是数字(码点)到字形(符号,包括汉字、ASCII字符、埃及字符等)的映射
另一方面,UTF-XXX 表示,给定一串字节,它们代表哪些 Unicode 数字(代码点)。因此,UTF-8 和 UTF-16 是表示 Unicode 的不同有效方式。
正如您想象的那样,与 ASCII 不同,UTF 和 GBK 都必须允许每个字符超过一个字节,因为它们的字节数远远超过 256 个。
在 GBK 中,所有字符都被编码为 1 或 2 个字节。
由于 GBK 专门用于中文,它在表示给定的中文文本时平均使用的字节数比 UTF-XXX 少,而对于其他语言则更多。
在 UTF-8 和 16 中,每个字形的字节数是可变的,因此您必须查看中文代码点使用了多少字节。
在 Unicode 中,中文字形位于 following ranges。然后你必须看看 UTF-8 和 UTF-16 表示这些范围的效率。
根据关于 UTF-8 和 UTF-16 的 Wikipedia 文章,中文字形 4E00-9FFF 的第一个也是最常见的范围在 UTF-8 中表示为 2 或 3 个字节,而在 UTF-16 中表示为2 个字节。因此,如果您要使用大量中文,UTF-16 可能会更有效。您还必须查看其他范围以查看每个字符使用了多少字节。
为了可移植性,最好的选择是 UTF,因为 UTF 几乎可以表示任何可能的字符集,所以观看者更有可能被编程正确解码。 GBK的大小增益并没有那么大。