Chinapromoter Blog

生活, 艺术, 网络, 技术, 工业, 消费, 记录趣味生活的点点滴滴。

« 网站编码Unicode、UTF-8、页面代码详解兼容IE和火狐JS父窗口调用iframe里面的对象、函数的方法 - SXWO EC »

字符集Charset和文件编码Encoding的区别详解

在绝大多数情况下,包括某些专业文章中,字符集和编码都统称为编码,这是因为一个字符集往往对应一种编码。但是在程序中,来不得半点马虎。

Charset 是字符集(在网页设计中, 又叫网页编码),Encoding 是编码(在网页设计中, 又叫文件编码)。

关于编码(Encoding)(在网页设计中, 又叫文件编码)

编码(Encoding)就规定了一个编号如何与二进制交互。主要编码是 ANSI、UNICODE、UTF-8、ASCII 等

关于字符集(Charset)(在网页设计中, 又叫网页编码)

字符集(Charset)即字符的集合,是Font中使用的术语,规定了在这些集合里面有哪些字符,每一个字符都有一个编号(一个整数),但这只是编号不是编码。

字符集(Charset)在.NET中也叫做GdiCharset,冠以"gdi"三个字,清楚地表明了,字符集,是"显示"的时候使用的。字体 (Font)也是“显示”用的。同一个Encoding中的同一个数码,在不同的Font的情况下,屏幕上显示的东西是不一样的。

浏览器中所说的 charset ,实际相当于 encoding+charset。修改charset是解决不了大部分乱码问题的。

(另一方面,一小部分“乱码”,是由于Font的charset设置错误而造成的假象,只要更换Font,或正确设置charset即可。windows 系统中有一个bug,就是,仅仅对于static控件,charset为0的时候,系统将认为charset==操作系统语言版本,而不是“区域选项”中 设置的“非unicode”语言。这种情况下,只有更换操作系统。不过,用Spy++察看发生“伪乱码”的控件,可以发现,并没有乱码,因为本来就不是乱 码。)

大多数人最先接触到的字符集是 1963 年的 ASCII,其中的每一个字符只需要用一个字节来表示就可以了。但世界上有许多种语言,像亚洲文字,比如中文,常用汉字就几千个,仅用一个字节来表示显然是不够的,假如使用两个字节。那么问题就来了,为什么要把两个字节看成是一个汉字的编号呢?为什么不把两个字节看成 ASCII 字符集的两个编号呢?为了解决此问题,就得使用编码来标识。

还有一个问题,编号(整数)1234 在字符集 A 中代表“千”,1234 在字符集 B 中代表“一”,那么 1234 究竟代表什么字呢?这就得明确字符集。

浏览器可以自动识别使用哪个字符集,一般说来它们使用 HTTP 头部的 Content-Type 标明的字符集,如果没有向 HTTP 头部发送该信息,一般参考使用 HTML 的 head 标签中的 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />,为什么是参考使用呢?

因为现在浏览器都比较聪明,如果发现这里用错了,一般会给予纠正。

做网页时,如果指定的 Charset 是 GB2312,那么就不应该在网页中出现繁体字,因为 GB2312 标准只有几千个简体的中文字。如果网页编码是 UTF-8,就不要指定字符集是 GB2312,因为虽然 UTF-8 编码对应的 UTF-8 字符集包含了 GB2312 的字符,但同一个字符在两个字符集中的编号不一样。

对于我们中文简体网页,一般来说有两种搭配

    * 一种是字符集是 GB2312,编码使用 ANSI。占用磁盘空间最少,网络传输效率最高。
    * 一种是字符集是 UTF-8,编码使用 UTF-8。虽然占用磁盘空间大,传输效率略低,但因为兼容面广,在应用 Ajax 以及包含多种语言文字时使用方便。鉴于此原因,现在许多网页开发工具都默认使用 UTF-8 来保存网页。

额外问题

有个很奇怪的现象,在Dreamweaver编写代码时,第一次保存页面时,无论charset用什么编码,页面的中文都不会显示成乱码,但是当第一次保存了页面后,把charset的编码改为其它类型(假如原本是gb2312,现在改成UTF-8),网页的中文就会显示成乱码。

分析原因,大概如下:

Dreamweaver第一次保存页面时,应该是先分析charset,并且根据charset的字符编码类型将文本文件的类型转换成和charset一样的的字符编码,所以在第一次保存页面时,无论charset用什么编码,页面的中文都不会显示成乱码。但是在第一次保存了页面后,Dreamweaver就不会再做这样的工作了,所以把charset的编码改为其它类型时,中文就会显示成乱码的现象。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表


Powered By Z-Blog 1.8 Spirit Build 80605

Copyright www.chinapromoter.cn. Some Rights Reserved. 浙ICP备05022498号