最近遇到一个客户,手机网站在苹果手机中的QQ浏览器中打开,是乱码。而在安卓手机就是正常的。
页面文件名index.html,站点是asp.net环境
开始,有这么几种猜测:
- html文件编码
- 页面制作的编码和声明编码矛盾
- html标准声明那块有冲突
于是,尝试对页面进行逐个删除,测试的方法,来回测试了十几次。得出如下结论:
- 页面内容比较少,测试的情况,苹果手机中的Q浏览器打开是正常的;
- 逐渐恢复页面内容的过程,又出现乱码;
- 尝试调整页面编码声明、html标准等,均无果;
后来,把页面代码放到另外一台服务器(linux系统),测试发现苹果的打开正常。
于是,认为是不是服务器配置的问题,仔细看了下出现乱码的站点的http响应头,发现如下情况
content-type响应一个带着编码utf-8,一个不带编码。带着uft-8编码的苹果打开正常,不带utf-8编码的,打开乱码。
异常响应
代码语言:text复制 HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html
Content-Encoding: gzip
Last-Modified: Thu, 23 Nov 2017 02:57:28 GMT
Accept-Ranges: bytes
ETag: "7d3358cc664d31:0"
Server: Microsoft-IIS/7.5
Date: Thu, 23 Nov 2017 04:12:37 GMT
Content-Length: 2059
正常响应
代码语言:text复制
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Date: Thu, 23 Nov 2017 02:49:13 GMT
Content-Length: 3838
因为服务器是
Windows Server 2008 R2 标准版 SP1 64位中文版
支持语言:.NET1.1/2.0/3.5/4.0/4.5、ASP、HTML、WAP
设置.net FrameWork版本 V4.0/V4.5(集成)
默认首页 index.aspx index.aspindex.htm index.html 等
所以想着能不能把index.html换成index.aspx试下,可能响应头就变了。如果变了,问题应该就能解决。
修改页面文件index.html为index.aspx,问题解决了。
看了站点根目录的web.config里面有如下命令
代码语言:text复制 globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"