首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

一个乱码的解决方案,一定给分

2011-12-24 
一个乱码的解决方案,在线等,高手进,一定给分我最近利用struts在做项目,凡是表单提交上来,只要是中文的数据

一个乱码的解决方案,在线等,高手进,一定给分
我最近利用struts在做项目,凡是表单提交上来,只要是中文的数据都是乱码,
我也试过了request.setCharacterEncoding( "gb2312 ")都没有用.于是我自己写了一个转码类,已经可以把乱码正确的转换成中文了.但是由于有时一个表单中会有多个中文的属性,如果对其进行一一转码,效率比较低.于是,我转码的这样一个动作,把他放到了数据访问层,也就执行sql语句的时候做,即对整句sql语句进行转码,这样无论表单中有多少个中文属性,最后都将拼接成一个sql语句,我只要转码一次.
我数据访问层结构大体上是这样的,后台一个数据库操作的常用方法类(里面大概是一些增删改查的方法,我想用jdbc的大家都是这么用的吧),然后这些增删改查方法接受的参数一般都是一个sql字符串对象,而我的转码工作,就是在这些增删改查的方法中进行转码的,即对参数sql字符串对象进行转码,这样也能转码成功.
但是由于我项目中还使用到了例如dwr以及struts   的formfile等技术,而这些技术获取到的属性,本身已经是中文的了(我估计可能是它们内部对中文已经进行过转码了),这样就导致我在数据访问层拼接成的sql语句中已经是中文了,而这时候如果把sql语句传递到增删改查的方法中进行转码,反而会被转乱码(如果已经是中文进行转码,反而会变成乱码的).导致插入数据库中数据是乱码.
这样就导致,我不得不为了项目中使用到的一些其他技术获取到的已经中文,而去在后台进行判断是否该转码,这样破坏了后台方法调用的以及后台类的封装性.
不知道有没什么其他方法能解决.
问题不太难,就是很棘手.解决也很容易,但是为了一些小问题,而去破坏一个类的封装性或者类的结构,不是一个面向对象的良好设计
望高手指点,能在保证不破坏原先系统各个对象的结构的情况下,解决这个乱码问题.在线等,一定给分....

[解决办法]
import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.RequestProcessor;

public class Myprocess extends RequestProcessor {

protected boolean processPreprocess(HttpServletRequest s, HttpServletResponse arg1) {
// TODO 自动生成方法存根
try {
s.setCharacterEncoding( "utf-8 ");
} catch (UnsupportedEncodingException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
return false;
}
return true;
}

}
增加一个过滤器,把每次提交的字符串内容转成你所要的编码格式。
[解决办法]
什么也不说了,在tomcat的con/server.xml里找到 <connector port= "8080 ".../> 在里面加URIEncoding= "UTF-8 ",然后在你project里的web.xml加上
<filter>
<filter-name> SetCharacterEncoding </filter-name>
<filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class>
<init-param>
<param-name> encoding </param-name>
<param-value> UTF-8 </param-value>
</init-param>
</filter>
这样的话post提交不会有乱码,get方法提交,你只需要用URLEncoder/URLDecoder就行了,不懂的可以mail to me :jaogun@163.com
[解决办法]
http://fll.blog.hexun.com/9156070_d.html
[解决办法]
关注
[解决办法]
过滤器,
[解决办法]
做个过滤器 自个写的 用的

用的时候部署下

目录:/*

成功了记得给分哦

呵呵

EncodingFilter.java

package com.Joshua.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import com.x3408.office.Constants;

public class EncodingFilter implements Filter {

public void destroy() {
// TODO 自动生成方法存根

}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO 自动生成方法存根
HttpServletRequest httpRequest = (HttpServletRequest) request;
httpRequest.setCharacterEncoding(Constants.CHARSET);
chain.doFilter(httpRequest, response);
}

public void init(FilterConfig arg0) throws ServletException {


// TODO 自动生成方法存根

}

}

[解决办法]
哈哈
楼主是不是用Tomcat?改用Resin吧。
[解决办法]
我们不是没有好机会,我们是没有好观念!!!
八十年代初,摆个地摊就能发财,可很多人不敢。
九十年代初,买支股票就能挣钱,可很多人不信。
二十一世纪,开个网站就能赚钱,可很多人不试。
加盟网站:http://ycl.cctve.cn/
有些人面对一个来之不易的良好机会总是拿不定把握,于是去问他 人,而新生事物之所以新就是因为90%以上的人还不知道、不认识 ,等90%的人知道了就不再是新生事物。就拿网上赚钱来说,你问10 个人,很可能10个人都摇头,但再过一段时间,这10个人都点头时 ,我想这个市场就已经开始饱和了!
成功只青睐于有胆识的人!难道,一定要等到全国人民告诉你网络真 的可以赚钱你才加入吗?那个时候什么都晚了!
记住!网络,带给我们的不只是聊天和游戏而已!它蕴藏着实现梦想 的无限可能!
挑战新兴行业 ,领先占领网络商机!!!!
轻松在家,每月3000~~5000的收入!!
创业网站:http://ycl.cctve.cn/
或者加我的QQ咨询、了解:
QQ:312178002 手机 13956175341 <耐心解答咨询,无意网赚者勿扰>

热点排行