日期:2014-05-16  浏览次数:20304 次

gbk编码下json传输中文乱码问题,亟待解决,求技术支持~
暑假期间花时间做了一个之前就构想好的社交网站(这学期大四,兴趣爱好做着玩玩的),因为涉及到图片上传等功能,所以struts2配置文件那边必须配置为
<constant name="struts.i18n.encoding" value="gbk"></constant>

但后面像发布状态、回复啊等等之类的功能为改善用户体验不可避免的用到了AJAX,我用的是struts2的json插件,接着乱码的问题就来了。
因为struts2的配置文件中设置了编码格式为gbk,加上在tomcat serve.xml中修改URIEncoding=gbk,但json插件对工程编码的要求却是UTF-8.
中文字符以UTF-8编码时占3个字节,而gbk却是两个,所以这也就产生了一个很有意思但却异常蛋疼的现象,输入的文字为奇数个时,末尾的那个字就会乱码,偶数时则可能不会(只是可能,如输入文字中含有“一”时则各种乱码),之前因为赶着做项目小聪明的用了一个投机取巧的方法,我在使用jquery post请求的时候先判断一下字数,奇数个时我就在末尾添加一个"齱"(这个字因该很少有人用到吧),到action中的时候我再把它截掉,试了试貌似还凑合,就继续赶工了(因为我还要复习考研⊙﹏⊙b汗)。但项目最近做完了,却唯独只剩下了遗留下来的这个隐患,乱码问题依旧还在,一大段文字中总会间或出现几个特不舒服的“??”,辛辛苦苦各种努力改善体验做出来的东西最后却败笔在这个乱码问题上。
我网上涉及到gbk编码下json中文乱码的资料却多是关于PHP的,难道java中很少有人碰到?
唯独找到这篇帖子http://flym.iteye.com/blog/183534#,他的问题是与我一样一样的,不才原本对过滤器就不是特别理解,没看懂他的“像过滤器一样,在进行参数编码前设置正确的编码”解决方式。
大牛们能给我提提解决问题的方法吗?或者帮助我以更好理解的方式解读一下他的解决方法,不甚感激。