encoding - "encoding,"、 "character set,"和 "code page"之间有什么区别?

标签 encoding codepages

我真的很努力地在这些方面做得更好。我对这样的国际化概念非常熟悉,但我需要更好地了解其背后的理论背景。

我已阅读 Spolsky's article ,但我仍然不清楚,因为这三个术语经常互换使用——即使在那篇文章中也是如此。我认为至少有两个人在谈论同一件事。

我怀疑很大一部分开发人员每天都在搞这些事情。我不想再成为那些开发人员中的一员。

最佳答案

“字符集”顾名思义:正确指定的不同字符列表。

“编码”是字符集(现在通常是 Unicode)和字符的技术表示(通常基于字节)之间的映射。

UTF-8是一种编码,但不是字符集。它是 Unicode 字符集 (*) 的编码。

之所以会出现这种困惑,是因为大多数其他众所周知的编码(例如 ISO-8859-1)都是以单独的字符集开始的。然后,当 Unicode 作为大多数这些字符集的超集出现时,可以将它们视为同一 (Unicode) 字符集的不同(但部分)编码,而不仅仅是孤立的字符集。以这种方式查看它们可以让您轻松地通过 Unicode 在它们之间进行转换,如果它们只是孤立的字符集,则这是不可能的。但将它们称为字符集仍然有意义,因此可以使用任何一个术语。

“代码页”是源自 IBM 的一个术语,它选择要显示的符号集。该术语继续被 DOS 使用,然后是 Windows,一直到支持 Unicode 的 Windows,它仅充当带有编号标识符的编码。虽然编号“代码页”这个想法本质上并不局限于 Microsoft,但如今该术语几乎总是意味着 Windows 知道的编码。

当人们谈论代码页<某个数字>时,通常是在谈论Windows特定的编码,与标准机构设计的编码不同。例如,代码页 28591 通常不会以该名称引用,而是简单地引用“ISO-8859-1”。基于 ISO-8859-1 的 Windows 特定西欧编码(用一些额外字符替换其一些控制代码)通常被称为“代码页 1252”。

[*:所有的UTF都是编码而不是字符集,但是这种东西并不是Unicode独有的。例如,日本标准 JIS X 0208 定义了一个字符集和两种不同的字节编码:有点令人不快的基于高字节的编码(“Shift-JIS”)和非常可怕的基于转义切换的编码(“JIS”) ').]

关于encoding - "encoding,"、 "character set,"和 "code page"之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441490/

相关文章:

Java字符编码写入文本文件

xml - 保留 xml 编码 XSLT

python - 损坏的希伯来语 : saved as ansi - covert back to UTF-8

c++ - WideCharToMultiByte - 对于 Shift-JIS 代码页,所需的大小和写入的字节数不同

php - 如何转换 htmlentities 符号中的阿拉伯字母?

C++ 文件字符编码

php - mySQL(和 php)中的特殊字符 - 基础知识

python - 将包含变音符号的数据导出到 Excel 可读的 .csv 中

node.js - 如何将 "binary"编码字符串解码为原始二进制缓冲区?

java - 如何从 Java 中的 stringbuilder 对象创建一个 utf8 文件