你遇到过页面乱码吗?原因在这里!

2017-09-18   出处: 搜狗测试  作/译者:铲子哥

小编在近期遇到了一个乱码的问题,从此认识到了服务器charset这个一个东东,在这里和大家分享下~

在浏览器一个页面右键→编码的子菜单中,都会展示页面的默认编码



那么这个默认编码是怎么选择的呢?

抓包看了下,原来是服务器返回的header中携带的。


那么服务端在哪里来定义返回给客户端的charset呢?

在nginx的server段中,有可以用来定义charset的地方:


可以看到,这个server中,定义了全局的charset为gb2312,在某个location中,又定义了局部的charset为utf-8.这样定义的结果是:对于服务器返回的内容中,对于指定charset的location接口,返回指定的charset,对于没有指定charset的location接口,返回全局的charset。这两种情况都是不受客户端发送的charset的影响的

那么,除了这几种情况,charset的返回还有以下这几种情况。



1、 对于没有指定charset的服务器,返回的charset默认和客户端请求中携带的charset一致。

2、 对于客户端没有指定的charset的请求,服务端默认返回utf-8的charset。
3、 对于client→serverA→serverB这样的请求逻辑。
  • a) 如果client指定了charset为GBK,serverB如果没有指定默认charset,则默认返回GBK。到达serverA的时候,如果serverA指定了charset为utf-8,则最终client收到的请求的charset为utf-8。

  • b) 如果client指定了charset为GBK,serverB如果指定charset为gb2312,则返回gb2312。即使到达serverA的时候,如果serverA指定了charset为utf-8,则最终client收到的请求的charset为gb2312。

所以,当服务端编码和client编码不一致时,或者服务端编码和本身文字编码不一致时,客户端就会展示乱码!改进看看你遇到的问题解决了没?



声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
270° /2706 人阅读/0 条评论 发表评论

登录 后发表评论
最新文章