java程序中乱码的问题

来源:互联网 发布:手机易容术软件 编辑:程序博客网 时间:2024/05/02 04:33
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中,并按照和服务器一致的编码方式编码,有的java教程里面降到了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解码,但火狐下未生效,原因未知,单步跟踪了代码都执行了,没啥问题。
0 0