页面编码与乱码的关系及乱码的解决(字符集与乱码相关)

【原创,转帖请注明转自javaeye,lllt】

目前常见字符集有:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。平时用在网页上用的较多的charset为 GB2312 和 UTF-8 (有时中文页面也会用到GBK)。当然 GB2312使用的是GB2312字符集;而UTF-8使用的是Unicode字符集,是Unicode的其中一个使用方式。(建议去百度百科看看“字符集”)

[b]网页的编码有何作用?[/b]

通俗的说,网页编码是网页的另一种语言,是网页传输过程中所需使用的语言,编写网页时,编辑器会将页面按照指定或者默认的编码格式进行编辑(相当于编程语言的编译过程),因为计算机本身不懂得英文和汉语,只会通过指定的数字来对应相关的字符,这也就是字符集的意义所在。

[b] 为何出现乱码?[/b]

服务器端将“编译”(注意引号,这里并非程序语言中的编译)好的页面代码传输给客户端。在浏览器端,浏览器会根据网页的 charset 属性来选择合适的字符集进行解释。
[color=red]因为不同字符集中,指定数字所对应的字符不一致,因此如果浏览器端和本身页面的字符集对应出错,那么就会出现乱码![/color]

[b]为什么会出现字符集对应出错呢?[/b]

文本编辑器(包括做前端常用的Dreamweaver和记事本等)在保存文本时(比如html文件)会按照预设的字符集进行编码。那么在解释这些编码的时候就会要与编译时的字符集对应才能正确的显示出来。
Dreamweaver,做前端最常用到的工具,关于怎么设置默认字符集我想都知道,这个工具在CS5版本以前,直接更改 charset 属性是无法直接将文本的编码格式更改的(CS5中可以直接更改charset 属性来更改编码格式),这也就造成了更改了charset 属性,而文档本身的编码格式却仍是原来的编码格式,浏览器在解释网页的时候会根据charset属性来选择相应的编码格式,这样就造成了字符集匹配不起来,出现乱码。这种情况可以在浏览器端手动更改浏览器的编码来获得正常的网页。
记事本也有编码格式,在“字体”选项下面。

[b] 浏览器的解释[/b]

浏览器是通过检查



来使用相应的字符集解释的,如果charset属性指定的编码格式与文档本身的字符集不符,就会出现乱码。
如果没有指定相应的字符集,浏览器会根据默认的字符集进行解释(多数默认为utf-8)

[b]解决[/b]

唯一的方法是使得文档的编码和指定的编码一致。
在Dreamweaver中,gb2312编码格式下,“代码”模式中的英文字体是“宋体”,而utf-8编码格式下,“代码”模式中的英文字体会变小,可根据这个来判断文档的编码格式,并对应
相应的charset。

    推荐阅读