在开发过程中,任何一个程序猿不可避免的令人头痛的问题就应该是乱码问题了。 简单讲述一下,我是怎么碰到这个问题的。 首先我们要做的事一个类似于QQ通讯录的一个功能,不过是在电视上呈现,做的是机顶盒的应用。 前台以ajax的方式提交get请求,这个请求众所周知的就是URL路径提交,里面携带一些参数信息,在参数中会有中文。前台将数据以utf8的格式提交,然后我再后台使用servlet框架,通过 String nickName = request.getParameter("nickName");这种方式获取参数。下面大家都知道出现了什么问题,对,乱码问题。 在网上搜了一下关于servlet的乱码问题怎么解决。一开始认为机顶盒应用汇通过中间件进行一些编码或者解码的操作,就一直没有按照网上给的一些方法进行修改。最后想到,机顶盒一定会兼容浏览器模式,不然这个机顶盒就没有存在的意义了。所以后来就根据网上的一些方法进行解码。 网上说,servlet的get请求,由于tomcat默认的编码方式是ISO-8859-1,所以会对参数进行ISO-8859-1的编码,我就尝试着用ISO-8859-1进行解码,输出结果还是不如人意,仍旧是乱码。我又尝试了网上说的那种使用new String(name.getBytes("ISO-8859-1"),"utf-8").还是不能解决问题,我就用其他的编码进行转码,也不行。 仔细审视了一下数据,前端通过机顶盒请求的数据是是utf8的,再看看自己接收到的数据跟传过来的一点都不一样,用utf根本就解析不过来。 了解了servlet和tomcat的一些编码机制,觉得,还是改一下tomcat,sever.xml配置文件中关于编码的设定。你如果不设置编码格式tomcat会以ISO-8859-1的格式进行编码和解码。所以在配置文件中设置了一下。结果不乱了。 <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" /> 其实在项目中不一定哪一种情况适用自己的项目,只能自己摸索。其次,甲方公司的服务器上的东西不能随便动,也就是tomcat之类的服务器上的东西,不能随意修改,不然会影响到其他的数据。这也是我改了两天没改好的原因,之前也想到修改tomcat的编码格式,但是一直没敢动服务器上的。 除了修改tomcat的配置文件,顺便推荐一个写的很好的东西,个人觉得楼主写的非常好。 http://blog.csdn.net/xiazdong/article/details/7217022。 总结一下吧: 1、在做项目时不能焦躁,因为java开发碰到的问题不是科学甚至神学能够解释的,所以不能着急。 2、不能随便参考网上的,一定要搞清楚怎么个机制,比如servlet处理参数的问题以及编码方面的知识,只有了解透才能够更好地应用于自己的开发。 3、有时候别人好用的东西,放在自己身上,就不好用,这个很正常。 乱码解决方案以及远离,我给的链接中博主已经写得很好了。补充一下,另外的方法。 1、网上是这么说的,使用ajax,get提交时是需要对中文参数进行两次解码才能好使。 前台页面中js:type=encodeURI(encodeURI(‘商品')); 后台servlet处理:URLDecoder.decode(type, “UTF-8″); 这种方式,我没试过,既然网上这么说了,应该也有一定的道理,如果其他的方式都不好用,那就试试这个方法。 2、就是修改tomcat中的配置文件的编码格式。 <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" /> 3、还有一种就是使用过滤器的方式解决,这个网上一大堆,就不在赘述了。 |
|
来自: 不醉怎能入睡 > 《java相关问题》