正文

[原创]中文乱码最终解决方案2006-07-24 11:02:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/16773.html

分享到:

环境:JDK1.5TOMCAT5.0.30%TOMCAT_HOME%:F:\Tomcat 5.0统一使用utf-8一。URL:修改%TOMCAT_HOME%\conf\server.xml文件找到如下内容:    <Connector port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"               enableLookups="false" redirectPort="8443" acceptCount="100"               debug="0" connectionTimeout="20000"                disableUploadTimeout="true" />添加:URIEncoding="utf-8"修改后内容如下:    <Connector port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"               enableLookups="false" redirectPort="8443" acceptCount="100"               debug="0" connectionTimeout="20000"                disableUploadTimeout="true" URIEncoding="utf-8" />二。处理表单乱码:用过滤器吧。下面是用于处理表单的一个filterpackage hrl.util.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;public class SetCharacterEncodingFilter implements Filter {    protected String encoding = null;    protected FilterConfig filterConfig = null;    protected boolean ignore = true;    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            this.ignore=false;    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {        // TODO 自动生成方法存根        if (ignore || (request.getCharacterEncoding() == null)) {            String encoding = selectEncoding(request);            if (encoding != null){                request.setCharacterEncoding(encoding);            }else                System.out.println("encoding has not set");        }        chain.doFilter(request, response);    }    public void destroy() {        // TODO 自动生成方法存根        this.encoding = null;        this.filterConfig = null;    }    protected String selectEncoding(ServletRequest request) {        return (this.encoding);    }}在web.xml里配置此filter,将其影射到所有页面上    <filter>        <filter-name>encoding filter</filter-name>        <filter-class>hrl.util.filter.SetCharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>utf-8</param-value>        </init-param>    </filter>        <filter-mapping>        <filter-name>encoding filter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>三。处理jsp&servlet页面显示乱码JSP中:最顶端加入如下代码:<%@ page language="java" contentType="text/html;charset=utf-8"%>关键:charset=gb2312servlet中:在doGet 或doPost方法中加入如下代码:response.setCharacterEncoding("utf-8");四。处理文件下载时提示保存文件名乱码的解决方法在处理下载的JSP或servlet里修改响应头部如下:response.setContentType("application/octet-stream;charset=utf8");将文件名进行编码转换:response.addHeader("Content-Disposition","attachment;filename="+hrl.util.text.DealString.toUtf8String(file.getName())+"\"");DealString类的toUtf8String方法如下:    public static String toUtf8String(String src)    {        byte[] b = src.getBytes();        char[] c = new char[b.length];        for(int i=0;i<b.length;i++)        {            c[i] = (char)(b[i]&0x00FF);        }        return new String(c);    }五。读取properties文件时出现乱码如果properties文件里含有中文时不可以用ResourceBundle度取,需先对properties文件进行编码转换在JDK中提供了native2ascii命令 他能够实现字符编码的转换。假设message.properties 文件在目录WEB-INF/resource目录下在命令行模式下进入WEB-INF/resource目录,然后执行如下命令native2ascii –encoding utf-8 message.properties message_zh_CN.properties参数-encoding表示要转换成的编码格式执行以上命令以后将生成message_zh_CN.properties文件 现在就可以用ResourceBundle类进行读取了六。AJAX乱码在向服务器传参前用函数encodeURIComponent(String str)对参数进行编码七。数据库编码拿MySQL举例在建表和建库时限定编码格式:eg: CREATE database <库> CHARACTER SET UTF8create table <表>(       .........)engine=InnoDB character set utf8;(完)

阅读(4133) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册