Php 为什么每个人都使用拉丁语1?

Php 为什么每个人都使用拉丁语1?,php,mysql,internationalization,phpmyadmin,Php,Mysql,Internationalization,Phpmyadmin,有人刚刚说utf8具有1到3个字节的可变长度编码 那么为什么每个人仍然使用拉丁语1呢?如果相同的内容存储在utf8中,它也是1字节,但utf8的优点是它可以适应更大的字符集 这是每个人使用拉丁语的一个隐藏原因吗 使用utf8和latin1的缺点是什么 这可能是一个“原因” 把不同的东西混在一起真的很烦人,所以你就用其他的东西 (我不是说这是一个很好的理由,但我认为这是一些人使用的理由)1)性能原因。 对于恒定长度,转到字符串的第n个字符很容易。对于可变长度,您必须遍历字符串开头的所有字符才能知

有人刚刚说utf8具有1到3个字节的可变长度编码

那么为什么每个人仍然使用拉丁语1呢?如果相同的内容存储在utf8中,它也是1字节,但utf8的优点是它可以适应更大的字符集

  • 这是每个人使用拉丁语的一个隐藏原因吗
  • 使用utf8和latin1的缺点是什么
    • 这可能是一个“原因”

      把不同的东西混在一起真的很烦人,所以你就用其他的东西

      (我不是说这是一个很好的理由,但我认为这是一些人使用的理由)

      1)性能原因。 对于恒定长度,转到字符串的第n个字符很容易。对于可变长度,您必须遍历字符串开头的所有字符才能知道它们的长度。 在unicode中实现这种性能的唯一方法是通过utf-32(所有字符都是4字节)。但这需要更多的记忆

      2) 拉丁语-1中带有变音符号(重音)的所有字符都在拉丁语-1的128-255范围内,因此在utf-8中使用多个字符进行编码

      3) 许多程序员不知道如何使用unicode,ISO 8859-1是(至少事实上)多种标准的默认字符编码,例如(至少对于文本内容):

      当发送方未提供显式字符集参数时,“文本”类型的媒体子类型被定义为在通过HTTP接收时具有默认字符集值“ISO-8859-1”。除“ISO-8859-1”或其子集以外的字符集中的数据必须使用适当的字符集值进行标记

      选择ISO 8859-1的原因可能是因为它是US-ASCII的超集,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个字符,其中每个字符的字符点直接映射到其二进制表示形式。所以12310是用011110112编码的

      • UTF-8使用前缀可变长度编码方案,其中前缀表示字长。UTF-8用于对通用字符集的字符进行编码,其编码方案可编码1048576个字符。前128个字符需要1个字节,0x80–0x7FF中的字符需要2个字节,0x800–0xFFFF中的字符需要3个字节,0x10000–0x1FFFF中的字符需要4个字节

      因此,一方面是可编码字符的范围,另一方面是编码字的长度


      因此,“正确”字符编码的选择取决于需要:如果您只需要ISO 8859-1的字符(或US-ASCII作为其子集),请使用ISO 8859-1,因为它只需要每个字符一个字节,而UTF-8的字符128–255需要两个字节。如果您需要更多或其他字符,而不是ISO 8859-1中的字符,请使用UTF-8。

      我发现很多时候人们使用它,因为它是默认的,他们不需要修改它。不,只有前128个字符是UTF-8中的1字节,128–255之间的字符为2字节。我记不起上次故意使用拉丁1的时间。您提到的前128个字符集中是否都是拉丁1字符?@David19801:ISO 8859-1有256个字符,其中前128个字符与US-ASCII相同。在UTF-8中,即字符集是ISO 8859-1的超集(Unicode字符集的前256个字符与ISO 8859-1的相同),只有前128个字符(因此US-ASCII的字符)使用一个字节进行编码;但Unicode字符集中与ISO 8859-1相同的其余128个字符(即128–255个字符)使用两个字节进行编码。第3点)您在这里的意思是什么?latin1不使用的特殊技能有哪些?例如,知道您需要在PHP和MySQL之间设置正确的Connection encodingig,否则您将存储和检索垃圾。关于unicode和字符集,通常需要了解一些事情,这是一个很好的起点:+1,但需要重申的是,尽管存在这种事实上的标准状态,但UTF-8是一种优秀的、得到广泛支持的标准,并且是国际化成为问题时唯一可行的选择。(不是纠正你说的,只是注释)
      Everyone uses latin1 because everyone else is too..