前几天帮实验室弄个页面,遇到了中文乱码的问题,在网上找了些资料最终解决了,在这里总结一下。
GB2312 – GBK – GB18030这三者是兼容的,但它们与UTF-8编码不兼容,这就是导致乱码问题的原因。如果你发现网页乱码,需要检查的地方有如下几个:
(1)网页文件本身。假设这是一个静态html文件,不同的文本编辑器(或者不同的选项)做出的文本文件的编码可能是不同的。我这次遇到的问题就是这样,用DreamWeaver保存出来的网页文件是GB18030编码(可能是我没有注意到软件里的选项设置),但我在其它的所有地方都声明编码方式是UTF-8,于是在FireFox下就出现了乱码,不过IE居然可以很威武地正常显示。建议使用稍高级一点的文本编辑器(比如win下的UltraEdit, Editplus等等都可以)把编码方式转换一下,使其与其他地方的配置一致。
(2)Apache的配置文件。在httpd.conf这个文件里有个AddDefaultCharset,这里可以设置默认的编码方式。这个东西会在浏览器向服务器发送请求时,包含在HTTP头信息中返回给浏览器。
(3)网页的<meta>标签。一个典型的代码是这样的
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
这样就声明了网页是UTF-8的编码。
(4)网页脚本文件,如PHP里可以写
header(”content-type:text/html; charset=utf-8″)
据说这个替换掉HTTP头的信息,我没有试过,不太清楚。
因为有这么多地方可以配置,当这些地方的配置出现不一致时,问题就出来了。<meta>标签,HTTP头,页面文件本身的编码,到底谁的优先级更高,不同的浏览器是不一样的。所以常会出现在IE下可以但在FF下乱码,或者反过来的情况。总之最好是让它们都保持一致啦。
另外,还有一种情况是数据库的乱码,等以后遇到了再说。