我真的在努力使这些东西变得更好。我对这样的国际化概念非常满意,但是我需要对其背后的理论有更好的了解。
我读过Spolsky's article,但是我仍然不清楚,因为即使在那篇文章中,这三个术语也可以互换使用。我认为其中至少有两个人在谈论同一件事。
我怀疑每天有大量的开发人员会费心地通过这些东西。我不想再成为那些开发人员之一。
最佳答案
“字符集”就是它的意思:正确指定的不同字符列表。
“编码”是字符集(今天通常是Unicode)和字符的(通常基于字节)技术表示之间的映射。
UTF-8是一种编码,但不是字符集。它是Unicode字符集(*)的编码。
之所以会造成困惑,是因为大多数其他众所周知的编码(例如:ISO-8859-1)都是作为单独的字符集开始的。然后,当Unicode作为大多数这些字符集的超集出现时,就可以将它们视为同一(Unicode)字符集的不同(但部分)编码,而不仅仅是隔离的字符集。通过这种方式查看它们,您可以轻松地通过Unicode在它们之间进行转换,如果它们只是孤立的字符集,则不可能实现。但是将它们称为字符集仍然有意义,因此可以使用任一术语。
“代码页”是源自IBM的术语,它选择要显示的符号集。该术语一直在DOS中使用,然后在Windows中使用,直到识别Unicode的Windows都在使用,在Windows中它仅用作带有编号标识符的编码。带编号的“代码页”是一个固有的想法,并不局限于Microsoft,但如今,该术语几乎总是表示Windows知道的一种编码。
当谈论代码页‹一些数字时,通常是在谈论Windows特定的编码,这与标准机构设计的编码不同。例如,通常不会在该名称下引用代码页28591,而只是简称为“ISO-8859-1”。 Windows特定于Windows的基于ISO-8859-1的西欧编码(用一些额外的字符代替了某些控制代码)通常称为“代码页1252”。
[*:所有UTF都是编码,而不是字符集,但是这种事情并不是Unicode独有的。例如,日本标准JIS X 0208定义了一个字符集和两种不同的字节编码:有些令人不愉快的基于高字节的编码('Shift-JIS'),以及基于令人恐惧的转义转换的编码('JIS ')。