JSP字符中文乱码问题解决方法汇总

问题背景:

因为IDE和Web服务器默认支持的字符编码是ISO-8859-1,从而导致前台页面提交的中文字符串变为乱码,此问题又被分为URL提交参数乱码(get方法提交)和通过表单组件提交乱码(post方法提交)两种,下面分别用橙色字体绿色字体标注不同情况的解决方法。

 

解决方法:

1.转换字符编码

●优点:无

●缺点:每次使用前所传值前都需要用此方法转换,繁琐,容易产生代码冗余

●示例代码:

String str=request.getParameter("name"); //假设表单元素传来name的值为中文字符

byte b[]=str.getBytes("ISO-8859-1"); //先转换为字节数组

str=new String(b,"GBK"); //转换字符格式为GBK,以上代码再每次调用表单元素传来的值前都要使用

 

2.使用setCharacterEncoding()方法

●优点:代码较方法1少

●缺点:每次使用前所传值前都需要用此方法转换,繁琐,容易产生代码冗余

●示例代码:

request.setCharacterEncoding("GBK");//首先设置request对象接收字符的编码方式为GBK

String str=request.getParameter("name"); //假设表单元素传来name的值为中文字符

 

3.实现Filter接口实现字符格式过滤

●优点:一劳永逸,灵活方便

●缺点:无

●示例代码:

step1:编写一个EncodingFilter.java文件

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 EncodingFilter implements Filter {

    public void init(FilterConfig config) throws ServletException {}

    public void destroy() {}

    public void doFilter(ServletRequest request,
            ServletResponse response,
            FilterChain chain)
            throws IOException, ServletException {

        request.setCharacterEncoding("GBK");
        chain.doFilter(request, response);
    }

}

-------------------------------------------------
step2:在web.xml中增添以下节点

<filter>  

<filter-name>EncodingFilter</filter-name>
    <filter-class>wind.EncodingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

4.修改Tomcat Server.xml文件

●优点:一劳永逸,灵活方便

●缺点:无

●示例代码:

在Tomcat的config文件夹下server.xml找到如下节点,添加一个"URLEncoding"属性

<Connectorport="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK" />

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值