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>
目录
相关文章
|
5月前
|
Java
Java开发实现图片URL地址检验,如何编码?
【10月更文挑战第14天】Java开发实现图片URL地址检验,如何编码?
151 4
|
5月前
|
Java
Java实现随机生成某个省某个市的身份证号?如何编码?
【10月更文挑战第18天】Java实现随机生成某个省某个市的身份证号?如何编码?
322 5
|
5月前
|
Java
Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
【10月更文挑战第14天】Java开发实现图片地址检验,如果无法找到资源则使用默认图片,如何编码?
115 2
|
2月前
|
自然语言处理 Java
Java中的字符集编码入门-增补字符(转载)
本文探讨Java对Unicode的支持及其发展历程。文章详细解析了Unicode字符集的结构,包括基本多语言面(BMP)和增补字符的表示方法,以及UTF-16编码中surrogate pair的使用。同时介绍了代码点和代码单元的概念,并解释了UTF-8的编码规则及其兼容性。
116 60
|
7月前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
186 0
|
5月前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
154 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
6月前
|
存储 移动开发 Java
java核心之字符串与编码
java核心之字符串与编码
38 2
|
7月前
|
Java Maven
【Azure Function App】Java Function部署到Azure后出现中文显示乱码问题
【Azure Function App】Java Function部署到Azure后出现中文显示乱码问题
|
7月前
|
Java
Java系列之:字符串UTF-8 编码格式转换位 UTF-32 【生僻字截取问题】
这篇文章讨论了在Java中处理包含生僻字的字符串时可能遇到的问题,并提供了一种解决方法:将字符串的编码格式从UTF-8转换为UTF-32,以确保每个字符都占用固定的字节数,从而避免在截取操作中破坏字符,示例代码展示了如何进行编码转换和字符串截取。
|
7月前
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
178 4

热门文章

最新文章