springMVC之解决ajax post 乱码

最近帮朋友作一个标准的WEB管理会员系统,到了项目开发后期,才发现一个很是致命的问题:中文乱码。
ok,具体问题是这样的:在eclipse+tomcat开发环境运行下,前台用火狐、谷歌浏览器以及IE运行都不会出现前台输入中文,后台接收乱码的状况。但在单纯运行环境tomcat server部署war容许下,就会出现前台输入中文,后台java接收字符乱码
可能不少同窗就会说,你多是前台jsp文件没有强制和后台开发语言设置相同的编码格式,因此会出现前台传入后台乱码的状况。但实际上的状况是,我已经彻底统一了所有编码格式为UTF-8,前台和后台以及数据库的编码格式彻底一致,这就解释了为何在eclipse开发环境下能够运行,且不存在任何乱码。
如今问题就出现了,很灵异。在tomcat纯运行状况下,就会出现乱码。我就在考虑是不是tomcat服务器上的字符设置,而后就去网上搜各类修改tomcat server.xml的配置,呵呵,结果是失败的。而后我就各类抓狂,尝试去查看乱码格式,结果猜出来乱码为GBK,在后台用new String(str.getByte("gbk"),"utf-8")这样是能够将乱码文字解码。哈哈哈,若是你认为这个问题就这样解决了,你就天真了。这样的解码只能对偶数个中文有用,对奇数个中文就会存在或首或尾出现乱码,这样的话,整个问题是彻底没解决到的。不过好在,用猜出来,从浏览器过来的中文格式是gbk,然而这并无什么用。其实如今都还真的没有搞懂,为什么从在限制jsp context编码utf-8的状况下,为什么会传gbk这种编码过来。
这个问题已经到了困扰到用户不能直接用的地步,因此必须先解决。而后就各类在网上搜,最后发现,又多是数据从浏览器端传出的时候被更改,因此去排查因此跟输入中文有关的地方,发现,我项目绝大多数的地方都用了AJAX,then我将能form提交的地方都改了,而后强制accept-charset="utf-8",最后解决了乱码问题。
固然这不是重点,由于从根本上没有解决AJAX post 中文乱码的问题。你不能说整个项目都不用AJAX(对于界面局部刷新是必须的),这是几乎不可能的。因此,我仍是得硬着头皮继续找解决方法。网上搜前台编码,排除不少,一个一个试,最后找到了方法:在前台js用AJAX以前,将所要传送的中文值强制编码:encodeURIComponent(eval(document.getElementById('username')).value),而后后台用java.net.URLDecoder.decode(user.getUsername(), "utf-8");这样就完美解决了AJAX传中文的问题。
这样解决方案是比较暴力的了,若是你的项目有上几十甚至上百的页面用到ajax传中文值,那就呵呵了。这也是我写这篇文章的初衷,但愿有更多的大牛看到,从而找出更好解决办法。
最后但愿这篇文章对有相同问题的同窗有用,由于我也是在遇到问题的时候但愿能够获得帮助。
最后祝各位 have nice day!java

相关文章
相关标签/搜索