0

从物理字节流的角度来看,对于每个使用 UTF8 存储的文件,我认为 UTF8 bomless 与 Cp1252 完全相同,是这样吗?

4

2 回答 2

6

绝对不是真的。如果你想让它成为一个真实的陈述,你需要添加“如果我只使用 US-ASCII 字符”这个子句。但这是一个巨大的“如果”。如果我们只使用 US-ASCII 字符,许多编码甚至都不存在。许多编码(包括 UTF-8)确实确保所有 US-ASCII 字符都使用相同的单字节表示进行编码。

于 2012-06-09T23:28:14.387 回答
0

不。 UTF-8 不仅涵盖了更大的字符集,而且任何高于代码点的 unicode 字符U+7f都将在 UTF-8 中由多个字节编码,在 CP-1252 中由单个字节编码。CP-1252 和 ISO-8859-1(也称为 Latin-1)之间有更密切的对应关系,但即使是这些也有细微但重要的不同之处。这种差异解释了出现的许多最常见的编码问题。

举一个例子,左单大引号由 unicode codepoint 表示U+2018。在 CP-1252 中,这被编码为 byte 0x91。这个字符在 Latin-1 中根本不存在,而在 UTF-8 中,它是由三字节序列编码的 0xe28098

更一般地说,可以说 Latin-1 和 UTF-8 是基于 Unicode 的编码,因为所有编码都可以通过算法映射到一个 unicode 代码点,并表示该字符,而 CP-1252 是一种非 unicode-基于编码。用于表示字符的字节与其 unicode 代码点之间没有规律的对应关系。

于 2012-06-11T19:12:46.123 回答