编码乱码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编码乱码问题相关的知识,希望对你有一定的参考价值。

1.提交表单时的编码问题

    页面Get或者Post提交form表单数据时,会对表单中的中文进行编码,而编码方式是由服务器页面响
    应 Header中的“Content-Type: text/html; charset=gb2312”确定的(和浏览器解码方式一致)。
    
    不管get提交还是post提交,input控件全部都进行了GB2312编码,提交的数据为“name=%B1%B1%BE
    %A9&btnSumbit=sumbmit”。修改web.config中“responseEncoding=utf-8”,发现服务器页面响应
    Header中的“Content-Type: text/html; charset=utf8”,再次提交表单时编码已经成了utf-8,
    内容变为“name=%E5%8C%97%E4%BA%AC&btnSumbit=sumbmit”。
    
     观察发现,不管get提交还是post提交,HTTP请求中并没有指定服务器端的解码方式,服务器端解
     码还是根据服务器配置获取的
     
2.浏览器地址栏编码

     在浏览器中输入地址:
      编码方式随浏览器不同而不同,IE11编码方式为GBK,服务器用GB2312解码正确;Firefox34.0编
      码方式为utf-8,服务器GB2312解码乱码。URL中的编码依赖于浏览器,开发中不建议使用,一些
      地址链接含有中文时,建议在生成链接时,对中文指定编码方式编码。
3. JQuery中的AJax提交 

    JQuery是一款优秀的js框架,被广泛使用,但通过AJax提交数据时,却容易出现乱码。通过测试和
    分析JQuery源码,AJax请求时,推荐方式为:        
    1)POST请求:参数放到data中,无需对参数值编码,JQuery在构造HTTP请求时,会调用js的函数
    encodeURIComponent()对data中的键值对分别进行utf-8编码,服务器用utf-8解码。url中对应的
    就是url地址,不能含有参数。
       
    即使服务器Globalization结点配置的GB2312解码,Request.Form["xxx"]也会用utf-8解码,因为  
    AJax的post请求中在HTTP头添加了代码“Content-Type: text/html; charset=utf8”,告诉服务器
    用utf-8解码,达到编码和解码一致的目的。这点可能和我们平时想的不一样,整站配置为GB2312  
    编码的站点,竟然AJax的post请求都是用的utf-8编码!
       
       2)GET请求:参数放在Url中,并按照和服务器一致的编码方式编码,如服务器配置的Globalization
           结点为UTF-8,则将参数值UTF-8编码,可以调用函数encodeURIComponent();如果服务器
           配置为GB2312,则将参数用GB2312编码,可以调用escape()。Get和Post请求的一大差别
           是,GET请求不会改变请求的Header,Request.QueyString["xxx"]解码用的是Globaliza
           tion指定的编码。
           
            默认情况下,JQuery的AJax方法通过post提交数据,编码都是用的utf-8,通过Header
            指定服务器解码方式也为utf-8,但某些特殊情况下可能想服务器用gb2312解码(现在想
            来应该不需要这种场景,因为本身就不大合理,当时可能在某些不大合理的前提下确实
            需要来着,还不停的百度),网上查找资料是说AJax时,添加属性“contentType: "app
            lication/x-www-form-urlencoded; charset=utf-8",”个人测试IE下生效了,服务器变
            成了GB2312解码,但火狐下未生效,原因未知,单步跟踪了代码都执行了,没啥问题。


本文出自 “11382920” 博客,请务必保留此出处http://11392920.blog.51cto.com/11382920/1757948

以上是关于编码乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

url编码中文乱码问题怎么解决

JSP中文乱码问题《转》

这乱码问题怎么解决呢,你问哈哈哈哈哈真的很棒哦,你自己说呢?啥事了?啥问题吗?

解决Linux文档显示中文乱码问题以及编码转换

解决各种tomcat中文乱码问题

命令行的乱码以及编码的问题的解决方法