php - 为什么每个人都使用 latin1?

标签 php mysql internationalization phpmyadmin

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

那为什么大家还在用latin1呢?同样的东西如果用utf8存储也是1个字节,但是utf8的优点是可以适应更大的字符集。

  • 这是每个人都使用 latin1 的隐藏原因吗?
  • 使用 utf8 与 latin1 相比有什么缺点?

最佳答案

ISO 8859-1 是(至少事实上)多个标准的默认字符编码,例如 HTTP (至少对于文本内容):

When no explicit charset parameter is provided by the sender, media subtypes of the "text" type are defined to have a default charset value of "ISO-8859-1" when received via HTTP. Data in character sets other than "ISO-8859-1" or its subsets MUST be labeled with an appropriate charset value.

选择 ISO 8859-1 的原因可能是因为它是 US-ASCII 的超集,而 US-ASCII 是基于互联网的技术的基本字符集。由于万维网是在瑞士日内瓦的 CERN 发明和开发的,这可能是为剩余的 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用于对通用字符集的字符进行编码,其编码方案可以编码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。

关于php - 为什么每个人都使用 latin1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792764/

相关文章:

php - 在 Laravel 中访问 php 数组

Mysql:查询在具有相同配置的另一台 PC 上不工作

internationalization - 是否有特定于语言环境的静态文件的命名约定?

python - 如何国际化方法注释以显示 django-admindoc

unicode - 网站上的日语分词是否被认为是常态且完全可以接受?

php - Laravel 方法不接收 $request 上的发布数据

php - 无法使用 Ec2 和 RDS 选择数据库 Foo

php - 如何在js文件中写入php代码

php - PHP解析器在阅读评论时是否需要微时间

php - 如何使用动态ID进行查询?