刚才有人说 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/