转载:教你彻底解决 Tomcat 5下文字乱码问题
http://tech.ccidnet.com/art/3539/20071205/1298139_1.html
使用 tomcat 时,相信大家都回遇到中文乱码的问题,具体表现为通过表单取得的中文数据为乱码。
下面是本人解决之路。
一、初级解决方法
通过一番检索后,许多人采用了如下办法,首先对取得字符串按照 iso8859-1 进行解码转换,然后再按照 gb2312 进行编码,最后得到正确的内容。示例代码如下:
String para = new String( request.getParameter("para").getBytes("iso8859-1"), "gb2312");
< filter> < filter-name>Set Character Encoding< /filter-name> < filter-class>filters.SetCharacterEncodingFilter< /filter-class> < init-param> < param-name>encoding< /param-name> param-value>EUC_JP< /param-value> < /init-param> < /filter>
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 encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } // 传送给下一个过滤器 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); }}
< mete http-equiv="contentType" content="text/html;charst=utf-8">
useBodyEncodingForURI = true