java中文编码乱码

简介: 开发中遇到中文乱码,请检查“jsp-tomcat-struts1-ajax-webservice”,请检查以下几处: 1.jsp页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt

开发中遇到中文乱码,请检查“jsp-tomcat-struts1-ajax-webservice”,请检查以下几处:

1.jsp页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page language="java" pageEncoding="GBK" contentType="text/html;charset=GBK"%>
<script type="text/javascript" src="${pageContext.request.contextPath }/tsjs/userinfo.js" charset="GBK"></script>

2.Action类:

	request.setCharacterEncoding("GBK");
/**...**/	response.setContentType("text/html");
        response.setCharacterEncoding("GBK");
        PrintWriter out = response.getWriter();
        out.write(price);
        out.flush();
        out.close();

3.tomcat配置中(修改tomcat下的conf/server.xml文件),Tomcat(默认ISO-8859-1编码)****此处可不做修改

<!--修改前<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />-->
<!--修改后-->
<Connector port="8080"  protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />

4.最后就是自己写一个过滤器,这个是最有效的解决中文访问(request/response)的办法了:

字符编码过滤器类EncodingFilter:

package com.ts.filter;
import java.io.IOException;
import java.util.Map;
import java.util.Set;
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;

 /**
 * ClassName: EncodingFilter Chinese encoding exception <br/>
 * Date: 2015-1-15 下午01:37:20 <br/>
 * <br/>
 * 
 * @author tskk@ts.com
 * 
 * first made 
 * @version 0.0.1<br/>
 * 
 */

public class EncodingFilter implements Filter {
    private FilterConfig config;
    private String encoding;
    /**
     * filter Chinese encoding
     * */
    @SuppressWarnings("unchecked")
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException {
        HttpServletRequest reqhttp = (HttpServletRequest) request;
        encoding = config.getInitParameter("encoding");
        encoding = encoding == null ? "GBK" : encoding;
        //if ajax request
        if(reqhttp.getHeader("X-Requested-With") != null && reqhttp.getHeader("X-Requested-With").equalsIgnoreCase("XMLHttpRequest")){
            request.setCharacterEncoding("UTF-8");
        //webservice req res
        }else if(reqhttp.getHeader("soapaction") != null){
            request.setCharacterEncoding("UTF-8");
        //other req
        }else{
          //post http req
          if(reqhttp.getMethod().equalsIgnoreCase("POST")){
              request.setCharacterEncoding(encoding);
          }
          //get http req
          if(reqhttp.getMethod().equalsIgnoreCase("GET")){
              Map map = reqhttp.getParameterMap();
              Set set = map.entrySet();
              for(Object obj : set){
                  //value entry.getKey() no encoding error
                  Map.Entry entry = (Map.Entry)obj;
                  String [] value = (String[]) entry.getValue();
                  for(int i = 0,j = value.length;i < j;i++){
                     String reqEncoding  = reqhttp.getCharacterEncoding();
                     reqEncoding = reqEncoding == null ? "ISO8859-1" : reqEncoding;
                     value[i] = new String(value[i].getBytes(reqEncoding),encoding);
                  }
              }
              request = reqhttp;
          }
        }
        chain.doFilter(request,response);
    }
    /**
     * init encoding
     * @param config encoding
     * */
    @Override
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
    }
    
    /**
     * destroy encoding
     * */
    @Override
    public void destroy() {
        this.config = null;
    }
}

web.xml配置:

	<!-- Chinese encoding -->
	<filter>
		<filter-name>EncodingFilter</filter-name>
		<filter-class>com.ts.filter.EncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>GBK</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>EncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
目录
相关文章
|
11天前
|
存储 Java
java用base64编码案例
Java Base64编码示例:导入`java.util.Base64`,设置字符串`originalString`,使用`Base64.getEncoder().encodeToString()`编码并存储到`encodedString`,打印编码后字符串。解码用`Base64.getDecoder().decode()`。
20 0
|
4月前
|
存储 Java Android开发
IO流:java中解码和编码出现乱码说明及代码实现
IO流:java中解码和编码出现乱码说明及代码实现
|
1月前
|
JSON Java 应用服务中间件
JavaWeb项目之乱码问题及如何解决
JavaWeb项目之乱码问题及如何解决
|
7月前
|
存储 Java
使用Java进行Base64编码的示例
使用Java进行Base64编码的示例
70 1
|
5月前
|
Java 容器
idea中关于java的图形化界面编程awt_container容器中Button(按钮)上汉字是乱码或者小方框的解决方法
idea中关于java的图形化界面编程awt_container容器中Button(按钮)上汉字是乱码或者小方框的解决方法
49 0
|
6月前
|
Kubernetes 数据可视化 搜索推荐
学习Java 8 Stream,提升编码能力!
学习Java 8 Stream,提升编码能力!
|
8天前
|
Java Spring
Java 效率编码 必备插件 Lombok 让代码更优雅
该内容是一个关于Lombok插件的教程摘要:介绍了Lombok用于减少Java开发中的模板代码,提升效率;讲解了如何在IntelliJ IDEA中安装Lombok插件,以及在pom.xml中添加依赖;并提到了@Data注解能自动生成getter/setter、equals、hashCode和toString方法,@Slf4j注解自动处理日志,@Builder用于构建对象,以及@AllArgsConstructor和@NoArgsConstructor注解生成构造函数。还鼓励探索更多Lombok的注解用法。
|
20天前
|
SQL 存储 安全
Java安全编码:防范常见漏洞和攻击
【4月更文挑战第18天】本文介绍了Java安全编码的最佳实践,包括防止SQL注入和XSS攻击,使用预处理语句和转义用户输入。强调了安全的密码存储、角色基础的访问控制以及防止会话劫持和CSRF攻击。此外,还提到数据保护措施,如使用HTTPS和加密敏感数据。最后,建议避免在错误处理中泄露敏感信息并记录审计日志,以提升Java应用的安全性。
|
26天前
|
Java API
编码的奇迹:Java 21引入有序集合,数据结构再进化
编码的奇迹:Java 21引入有序集合,数据结构再进化
16 0
|
26天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
15 0