中文乱码问题

来源:互联网 发布:淘宝客推广方式大全 编辑:程序博客网 时间:2024/06/11 17:57

 在J2EE的应用中,JSP+Struts+Mysql商务网站设计的过程中,常常遇到中文乱码问题.
结合金融项目的实战,总结解决方法如下:
从MVC三层去控制中文字符乱码问题.
如果是get方法过来的,则需要在apache tomcat里设置,具体参照位置搜到
<Connector port="8888" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />
就是Connector port位置,8080的位置,没改端口号的情况下,增加:
uriEncoding=”utf-8”
1,对于web页面的乱码问题,需要设置JSP页面头.在<html>之前引入如下:
<%@ page contentType="text/html; charset=UTF-8"%>
<
%@page pageEncoding="UTF-8"%>
2,在Struts框架的使用过程中,需要在web.xml中引入filter,且需要在web.xml的<web-app…
节下直接设置,引入方法参照如下:
<filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>com.litian.filter.SetCharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>utf-8</param-value>
            </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
[注] com.litian.filter.SetCharacterEncodingFilter java代码实质是apache tomcat目录下,
webapps/examples/WEB-INF/classes/filters/ SetCharacterEncodingFilter.java,直接copy到
自己的项目中,并重构实现.

在Action中debug的时候,从web页面接收到的数据如果仍然是乱码的话,可以在action执行代码前加入如下语句参考:
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
3,以上设置保证了在struts框架调用的过程中,从view层到control层的数据中文化的实现,但是在MySQL的安装和设置环境中,一定要保证在my.ini中default-character-set=utf8.总共两处设置,从Model层保证了数据格式的统一.注意,MySQL的配置文件改变之后,需要重启MySQL应用服务,从控制面板->服务中停掉后重启.

备注:类SetCharacterEncodingFilter
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;
public class SetCharacterEncodingFilter implements Filter {
    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;
    public void destroy() {
        this.encoding = null;
        this.filterConfig = null;
    }
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
        throws IOException, ServletException {
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encodingTmp = selectEncoding(request);
            if (encodingTmp != null) {
                request.setCharacterEncoding(encodingTmp);
            }
        }
        chain.doFilter(request, response);
    }
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null) {
            this.ignore = true;
        }
        else if (value.equalsIgnoreCase("true")) {
            this.ignore = true;
        }
        else if (value.equalsIgnoreCase("yes")) {
            this.ignore = true;
        }
        else {
            this.ignore = false;
        }

    }
    protected String selectEncoding(ServletRequest request) {
        return (this.encoding);
    }
}

原创粉丝点击