此utf8 非彼utf8 ——谈http协议里的编码问题
我这里看两个编码:
BDPAGETYPE:2
BDQID:0xc92b034d0bc985e8
BDUSERID:809441751
BDQID:0xc92b034d0bc985e8
BDUSERID:809441751
Cache-Control:private
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:13047
Content-Type:text/html;charset=utf-8
Date:Mon, 16 Sep 2013 03:50:00 GMT
Expires:Mon, 16 Sep 2013 03:50:00 GMT
Server:BWS/1.0
Set-Cookie:BDSVRTM=91; path=/
Set-Cookie:H_PS_PSSID=3361_2777_1431_2976_3312; path=/; domain=.baidu.com
Vary:Accept-Encoding
上面这段代码是访问百度的时候返回的http包的头部,大家看这个红色的部分,这里有个charset=utf-8
我们再看一个事例
<!Doctype html><html xmlns=http://www.w3.org/1999/xhtml><head><meta http-equiv=Content-Type content="text/html;charset=utf-8"><meta http-equiv=X-UA-Compatible content=IE=EmulateIE7><title>百度一下,你就知道 </title>
这是返回的html代码里的,这里面也有个charset=utf-8 这两个是表达的一个意思吗?答案是否定的
下面我们就详细解释下这两个地方:
先看第二个,下面的例子
<form action="" method="post">
<input type="text" value="你好" name="kw">
</form>
提交数据的时候回变成这样 kw=%E4%BD%A0%E5%A5%BD
回对form表单里的数据进行utf-8编码
我们再看第一个charset=utf-8,这个又是表示的什么呢?
大家看到了没,第一个charset=utf-8表示的是文件的编码格式;你们当文件什么格式的时候 http包返回的头部就是什么吗?答案是否定的。
http包的头部的编码的信息不是根据文件而变化的、是通过web服务器iis、apache等配置的,所有当第一个UTF-8 和硬盘上网页文件的表编码格式不一样的时候,乱码就产生了