当前位置: 代码迷 >> Java Web开发 >> 一个乱码的解决方案,一定给分
  详细解决方案

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

热度:94   发布时间:2016-04-17 14:57:31.0
一个乱码的解决方案,在线等,高手进,一定给分
我最近利用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 {
  相关解决方案