对于java web 项目中文乱码的解决…

在java的ssh 项目中,我使用了utf8的字符集,mysql存储同样为utf8。
近期由于用到了big5的API,别人返回的数据为big5,让我纠结不已。硬着头皮上吧。 
第一个上来思路就错了,没有方向感。也不知道别人回来的数据是什么,就尝试着用在action 中的struts中的String bean 进行尝试。
例如: Action{
private String msg;
}
get 和set 方法不写了,action 继承父类也不写了,大家明白怎么回事就行。
在method 中就尝试着用 msg=new String(msg.getBytes("utf-8"),"big5");結果亂碼,msg=new String(msg.getByte("big5"),"utf-8");結果,錯,乱码,乱码。当时网络上都是这样的建议,我就纳闷我怎么就不行了呢,纠结阿。
第二个思路也是错的。
应为我的web项目是采用utf8的字符集,故认为:api结果来的数据:big5Msg 的byte [] 形成了 utf8 的字符串 msg,其中java 系统运行中采取的为unicode,是不是big5Msg到unicode 在到utf8 的过程中出现了什么错误。那么我 编码无非就是byte[] 的不同,应该是可逆的, 那么取得utf8的byte [] ,转成unicode 的编码,在到big5,不就可以得到正确的数据了嘛, 对于java <wbr>web <wbr>项目中文乱码的解决心得 <wbr> <wbr>struts+spring+hibernate,思路貌似很正确,行动。google 一搜,丫的,还要算法,java中没有现成的算法,搜算法,算是byte 的运算。 放弃。
反思:
因为是外界的api,返回的数据都是在服务器上看到的,也不知道返回来的什么数据,到底乱码的得到的结果与原始数据有什么不同。其中的各自形成的byte [] 有什么不一样。在本机上无法测试。 对于java <wbr>web <wbr>项目中文乱码的解决心得 <wbr> <wbr>struts+spring+hibernate冒出个想法,在本机用post 的方式提交big5编码数据,我看看到底给我形成了什么样子的结果。行动。
第三个解决方案:
form提交到action,乱码,网络上说request.setCharactEncoding("big5");可行,但是到action中我设置了啊,没有用,给action 些拦截器,把 request.setCharactEncoding("big5");写在拦截器里边,没用。丫的,气死我了。 对于java <wbr>web <wbr>项目中文乱码的解决心得 <wbr> <wbr>struts+spring+hibernate写在servlet中,日啊,还是没有用。其实也尝试了,tomcat中的server.xml 中配置 URIEncoding ,useBodyEncodingForURI,都没有用。 
第四个方案:
固定提交数据。就提交“中國”,然后看byte[] ,同时还写了一个 对“中國” 的一个各种尝试的编码,以及打印byte ,通过对比,结果看到的数据是 form 提交过来的 在action 和servlet 中形成的数据都是 :
big5Msg的byte []   big5bs;在action 和servlet中通过request.getParameter("msg"); 获取的数据为
new String(gib5bs,"utf-8");这样的一个String。
那么: 只要在形成 new String (big5bs,"big5"),就不存在乱码问题了。
那么怎么样才能做到呢?
当看到 request.setCharactEncoding("big5");调用setCharactEncoding 时,不需要再getReader()和getParameter()方法之前才能生效,细细想来,到底是为什么呢,其实很简单,其实 form提交过来的是一个经过big5编码的 byte [] 数据,在 getReader()和 getParameter() 之前调用setCharactEncoding 方法是制定传过来的byte [] 按照什么形式编码,在调用过getReader() 和getParameter() 后,再次用setCharactEncoding 方法是无效的,因为byte [] 数组已经形成了 指定的字符串,如果没有,则是形成了默认的字符串, 之后的getParameter(),getHeader() 都是对形成的字符串进行制定格式的解析。

你可能感兴趣的:(对于java web 项目中文乱码的解决…)