怪异的js编码问题
页面是gb2312编码。
js文件也是gb2312编码。
在本地和一个服务器A上正常。
但是换到另一台服务器B上就会出现乱码现象。加上charset=”gb2312″也没有用。
直接在chrome/firefox浏览器中打开js文件。A正常。B乱码。
这说B服务器上的js文件虽然是gb2312编码。但是浏览器却认作utf8。估计是服务器配置相关。http://www.diybl.com/course/4_webprogram/php/phpjs/200863/121166.html
网js 编码 问题
GBK的页面(不要问我为什么GBK,因为GBK,所以GBK),引用了Google map的API, 但是由于GoogleMap API返回的js脚本是utf-8的,所以导致在IE下, 浏览器无法正确解析.
这个问题,总的来说,可以用下图描述(原谅我的美术水平):
问题图
也就是, 由于服务器中生成的HTML是基于gbk编码的, 并且由于Apache的DefaultCharset(后叙), 所以导致IE会以gbk编码去解析从外部引入的GoogleMap js,那肯定是不能正确解释的.
浏览器判断一个页面的编码有俩个途径, 一种是通过HTTP响应头,
HTTP/1.x 200 OKDate: Sat, 18 Oct 2008 21:53:51 GMTServer: Apache/2.0.52 (Red Hat)X-Powered-By: PHP/5.3.0alpha2Connection: closeTransfer-Encoding: chunkedContent-Type: text/html; charset=GB2312
注意最后一行, 这个是由HTTP头部指明的页面编码格式.
另外一种就是我们常见的, 也会另很多初学者困惑的meta:
问题就在于,没有一个统一的标准,来指明这俩中方式的优先级, 不同的浏览器有着不同的优先级策略.这也就是为什么,我们在FF下正常浏览的页面,在IE下会乱码的原因.
我之前的文章Apache的Charset设置中已经介绍过了在Apache下设置DefaultCharset以后产生的影响,
这个问题已经遇到过俩次了,就是页面中明确指明了编码是UTF8,但是显示是乱码。
虽然知道解决方法,也知道是Apache的原因,但是一直没有去找其所以然,今天趁机,就研究了一下。1.页面没有指定charset , Apache配置defaultcharst gbk , 页面文件编码是utf-8
结果: 乱码,使用wireshark抓包,发现服务器返回的header中指明了:
Content-Type: text/html; charset=GBK
结论:当页面没有指明charset的时候,Apache的defaultcharset起作用
2. 页面指定charset为utf-8, Apache配置defaultcharset gbk. 页面文件是utf-8
![]()
![]()
测试Apache DefaultCharset
![]()