从物理字节流的角度来看,对于使用UTF8存储的每个文件,我认为UTF8 bomless与Cp1252完全相同,是真的吗?
答案 0 :(得分:6)
绝对不是真的。如果要使其成为真正的语句,则需要添加“如果我只使用US-ASCII字符”这一子句。但这是一个巨大的“如果”。如果我们只使用US-ASCII字符,则甚至不存在许多编码。许多编码(包括UTF-8)确保所有US-ASCII字符都使用相同的单字节表示进行编码。
答案 1 :(得分:0)
没有。 UTF-8不仅覆盖了更大的字符集,而且代码点U+7f
上方的任何unicode字符都将由UTF-8中的多个字节和CP-1252中的单个字节进行编码。 CP-1252和ISO-8859-1(也称为Latin-1)之间有更密切的对应关系,但即使是这些也只是小而重要的方式不同。这种差异解释了许多最常见的编码问题。
举一个例子,左单曲引号由unicode代码点U+2018
表示。在CP-1252中,它被编码为字节0x91
。该字符在Latin-1中根本不存在,在UTF-8中,它由三字节序列0xe28098
编码。
更一般地说,可以说Latin-1和UTF-8是基于Unicode的编码,因为所有编码都可以在算法上映射到unicode代码点,并且将代表该字符,而CP-1252是非编码-unicode编码。用于表示字符的字节与其unicode代码点之间没有常规对应关系。