关于字符集和字符编码以及代码页的前前后后
http://f.dataguru.cn/thread-147467-1-1.html
其实本来是不想把这部分内容用随笔的方式写出来的(本来打算贴在寒飞雨的这篇文章的回复里),后来阴差阳错机器出了问题,我的长篇大论就此泡汤。只好潦草的在后面回了一个“字符集(charset)和字符编码(encoding)不是一个概念”。因为感觉即使这两个概念混淆,其实问题也不大,所以未做详述。
不过今天看到寒飞雨发来的一个短消息,询问在什么地方能找到字符集和字符编码的详细资料。我尝试去Google了一下,发现以前让我弄明白这件事情的文章很难找到。再加上其实那篇文章主要针对的是Unicode,所以萌生了自己再把这部分内容重写一次的想法。另外寒飞雨的那本书从样张来看的确是很不错,作者本人这种治学的态度也让人很感动。
字符集和字符编码是很容易被搞混的概念,这不奇怪,因为这两个东西并不需要特别严格的区分。
字符集的定义其实就是字符的集合,而字符编码则是指怎么将这些字符变成字节用于保存、读取和传输。
所以可以看出来,应该说抛开字符编码讨论字符集是没有意义的事情。因为字符集并不定义这些字符怎么保存,所以在一开始,这两个概念也没有分开的必要。
ASCII恐怕是全球知名度最高的字符编码方案,ASCII所能表示的所有字符,我们就可以叫做ASCII字符集。值得注意的是ASCII字符集只有128个字符,这是因为ASCII编码是将字符编码成7位二进制的(最高位不用)。
现在熟知的256个字符的版本其实叫做EASCII编码方案,你可能会以为EASCII是一种编码方案,其实不然,他是一大堆基于ASCII编码方案的扩展,详细资料可以参见IEC_8859。
当然,这些都是在中文(东方文字)编码出现之前的事情。
西方国家的字符与英文所使用的字符(拉丁字母)大同小异,