有人刚才说utf8的长度编码为1到3个字节。
那么为什么每个人仍然使用latin1?如果同样的东西存储在utf8中,它也是1个字节,但utf8的优点是它可以适应更大的字符集。
答案 0 :(得分:9)
ISO 8859-1是HTTP等多个标准的(至少事实上的)默认字符编码(至少对于文本内容):
当发送方未提供显式字符集参数时,“text”类型的媒体子类型被定义为在通过HTTP接收时具有默认字符集值“ISO-8859-1”。除“ISO-8859-1”或其子集之外的字符集中的数据必须使用适当的字符集值进行标记。
选择ISO 8859-1的原因可能是因为它是US-ASCII的超集,它是基于互联网的技术的基本字符集。随着万维网在瑞士日内瓦的欧洲核子研究中心发明和开发,这可能是为剩下的128个角色选择西欧语言字符的原因。
开发Unicode标准时,ISO 8859-1的字符集用作Unicode字符集的基础(通用字符集),因此前256个字符与ISO 8859-1的那些。这可能是由于ISO 8859-1对Web的重要性,因为它已经是许多技术的标准字符编码。
现在讨论ISO 8859-1与UTF-8相反的优点,我们需要查看底层字符集和用于编码这些字符的编码方案:
ISO 8859-1包含256个字符,其中每个字符的字符点直接映射到其二进制表示。所以123 10 用01111011 2 编码。
UTF-8使用前缀可变长度编码方案,其中前缀表示字长。 UTF-8用于编码通用字符集的字符,其编码方案可编码1,048,576个字符。前128个字符需要1个字节,0x80-0x7FF中的字符需要2个字节,0x800-0xFFFF中的字符需要3个字节,0x10000-0x1FFFFF中的字符需要4个字节。
一方面是可编码字符的范围与另一方面编码字的长度有所不同。
因此,选择“正确”字符编码取决于需要:如果您只需要ISO 8859-1(或US-ASCII作为其子集)的字符,请使用ISO 8859-1,因为它只需要与UTF-8相反的每个字符的一个字节,其中字符128-255需要两个字节。如果您需要比ISO 8859-1更多或更多的字符,请使用UTF-8。
答案 1 :(得分:3)
1)性能原因。 使用恒定长度,转到字符串的第n个字符很容易。对于可变长度,您必须遍历字符串开头的所有字符才能知道它们的长度。 在unicode中实现此性能的唯一方法是通过utf-32(所有字符都是4个字节)。但它需要更多的记忆。
2)Latin-1中所有带变音符号(重音符号)的字符都在latin-1的128-255范围内,因此在utf-8中使用多个字符进行编码。
3)很多程序员不知道如何使用unicode
答案 2 :(得分:0)
这可能是一个“理由”
Everyone uses latin1 because everyone else is too..
它真的很烦人混合它们,所以你选择其余的东西
(我不是说这是好的原因,但我认为这是一些人使用的)