对于HTML文件编码的声明,主要有两种方法:

  1. 文件内meta声明
  2. 服务器端charset设置

一、文件内meta声明

meta声明也有两种方法:

<meta charset="utf-8"> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

其中上述短一些的是HTML5推荐声明方法,而长一些的则是普遍采用的HTML4声明方法。

而实际上,目前推荐的是用短版的,实际上几乎所有的浏览器都支持短版声明方法,甚至IE6也支持。

注意:meta声明语句必须紧跟在<head>后。

二、服务器端charset设置

HTTP服务器端设置比较不常用,但实际上效果可能更好。

对于nginx而言,只需要在

server {
...
}

字段内增加

charset utf-8;

即可为此server所有html文件声明UTF-8编码,具体可在响应HEADER中Content-Type字段看到编码声明。

这样做就可以免去在HTML中声明编码。

三、混用文件内meta声明和服务器端charset设置

当然一般情况下是不推荐两次声明的,如果声明的编码方法一样倒是没啥问题,但如果服务器短和文件中编码声明不一样,就会有意想不到的效果了。

总的来说,浏览器会以服务器端编码声明为准,而忽略文件内声明。即,如果HTML文件声明编码为gb2312,且文件编码格式确实为gb2312,但服务器端设置为UTF-8,则服务器按UTF-8解析,结果是乱码。

四、不进行编码声明

不进行编码声明,则浏览器会采用缺省设置,如中文环境下chrome缺省设置为gb2312。