Html页面的编码问题
今天突然碰到了网页乱码问题,啥折腾了几个小时,算是明白了其中一点奥妙。自己掌握的知识还是太少了,老是觉得莫名其妙的问题,其实明白了它就是这样。
网页的编码由许多方面决定着,我目前整理的有如下四个方面:文件保存的编码类型,文件中声明的编码类型,服务器的编码类型,客户端的编码类型。
1. 文件保存的编码类型。我平时可能很容易忽略这个,因为编辑器给我设置了一个默认的编码保存方式,一般是ANSI,这个值是可以更改的,越强大的编辑器可选择的编码类型越多。Windows上最简单的记事本在使用另存为方式保存文件时都可以设置要保存的编码类型。
2. 文件中声明的编码类型。在写Html文件时,我可能都会忽略在<head>标签对中的这个声明: <meta http-equiv="Content-Type" content="text/html; charset=utf8" />,经过我简单的测试,我感觉其中charset的属性就是在告诉客户端(比如浏览器):我使用的是XXX编码,请使用对应的编码来解析我。如果不声明的话,浏览器会使用操作系统默认的语言环境所使用的编码来解析Html文件。
3. 服务器的编码类型。这个一般都是写在某个配置文件中,大部分时候它可能没有启用。服务器其实挺聪明的,在没有启用默认编码的情况下,它会根据文件保存的编码类型自动解析后返回给客户端。如果启用了默认编码,则转换为默认编码后返回给客户端。所以这里最好是不要设置默认文件编码。(服务器环境有些复杂,这个东西理解可能有问题)
4. 客户端的编码类型。以浏览器为例,可以设置查看网页所使用的编码类型。找找各大浏览器设置项里面的编码/Encoding总会找到一大串的编码类型,看得你头晕。一般我们都不会去动这个设置项,它已经非常精明。勾上自动选择/Auto detect 项之后基本上就万事大吉了。
接下来就看看乱码是怎么出现的了。
首先要说明的是,如果上面四个方面的编码类型都是一致的话,那么绝对不会有乱码问题出现。如果真有乱码问题,那估计是人品问题了,哈哈~这里暂时没有考虑从数据库取出数据以及表单提交数据两方面。
在中文情况下,常见的问题是1中使用了默认的ANSI,2中声明用utf8,或者1中使用utf8,2中声明用gb2312,两种情况都是会出问题的。但当 1中使用ANSI,2中使用gb2312或者不声明时,大部分情况下是正常的。我暂时认为ANSI和gb2312这种组合没问题是因为它们使用同样的字节位数来储存信息的,而utf8则跟他们不一样,采用更多位数来储存信息,才能满足各个国家需要的国际标准。