这几天,好久没有写过了,今天一个ajax提交中文乱码的问题需要解决,在徘徊了一天,看到了一个人的高见,必杀技解决了这个问题,页面有个中文搜索需要传递到后台,发现jquery都会出现中文乱码,有人说可以采用encodeURI对中文编码,是的这个是个好的办法,但是也存在着问题,后台服务器解码后通过: new String(传过来的参数.getBytes("ISO8859_1"),"UTF-8")这样转换回来,这样能转换成功的前提是,我们知道服务器采用了ISO8859_1编码,如果不是,这样我们就只剩下干瞪眼了,在解决这个问题间,我在别人的一个发帖的回复中,看到了一个牛人提出的一个必杀技,称之为必杀技确实它可以顺利解决你中文在页面编码一次,后台就能直接通过服务器解码得到中文,连那个string编码转换都省了,附上他的必杀技:在tomcat的server.xml中的
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>这段中加上 URIEncoding="utf-8",这个确实是个好想法,但是公司的人员都是人来人往,可能开发的人知道把这个tomcat的配置加上这个,但是某天换了一个人,tomcat重新部署,可以这个注意项可能就遗忘在漫漫的岁月中了,况且可能将来的someday,不用tomcat这个问题又会出现,虽然效果是挺好,但是后遗症比较麻烦,在一个人的博客中看到了一个方式,这个方式我比较推崇,真是一个一劳永逸的方式,简单说说这个原理,那就是对中文的字段在前端进行编码两次,英文编码后传到后台是什么就是什么,编码一次,到后台服务器自动解码,这样中文会因为服务器的默认编码发生变化,两次编码的话服务器解码一次,还剩一次编码,这样不会因为服务器的编码而发生编码(因为编码后都是数字和字母以及%),这样再解码一次,就可以转换为中文了。这样就绕过了不知道到服务器的默认编码是什么的问题。完美解决。附上,前端编码与后端解码的语句:
前端编码两次:encodeURI(encodeURI(要编码的中文),'')
后端解码:URLDecoder.decode(request.getParameter(对应的字段名称), "UTF-8")
或者把请求方式变为post也能解决这个问题,想后端通过http的方式调用远程的接口,可以把中文编码,对header中加入
httpGet.setHeader("Content-Type","application/text; charset=UTF-8");这样相当于告诉了接收方字符的类型和编码方式。