乱码问题集合--关于jsp和servlet中的乱码问题,传参等

来源:互联网 发布:mac如何查看隐藏照片 编辑:程序博客网 时间:2024/05/12 14:14

     在jsp和servlet的开发中,今天自己做的一个小例子中出现了中文乱码问题,用了许多方法,发现还是解决不了。最后我用了过滤器,才算终结。

    此方法总结如下:在jsp页面中使用<%@ page pageEncoding="GB2312"%> ,这里的pageEncoding是GB2312,那么我们在过滤器web.xml中所使用的<param-value>GB2312</param-value>也为GB2312。总之一条:就是上述两者一致即可,比如同为UTF-8

  我将过滤器的java代码和web.xml的配置写

//--------------java代码部分:CharsetFilter .java

package com;

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 CharsetFilter implements Filter {
 private String charset = "GB2312";
 
 public void destroy() {
  
 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain arg2) throws IOException, ServletException {
       request.setCharacterEncoding(charset);
       arg2.doFilter(request, response);
 }

 public void init(FilterConfig arg0) throws ServletException {
   charset = arg0.getInitParameter("charset");
   System.out.println("字符过滤器开启,当前状态:"+charset);
 }
}

//--------------web.xml部分(以下部分可以直接复制粘贴到WEB.XML下)

  <filter>
     <filter-name>CharsetFilter</filter-name>
     <filter-class>com.CharsetFilter</filter-class>
     <init-param>
        <param-name>charset</param-name>
        <param-value>GB2312</param-value>
     </init-param>
  </filter>
  <filter-mapping>
     <filter-name>CharsetFilter</filter-name>
     <url-pattern>/*</url-pattern>
  </filter-mapping>

 

 

在struts中的中文乱码解决的一点体会:

一般出现中文乱码是下边几个方面:

1.页面显示中文乱码

2.传递参数中文乱码

3.国际化中文乱码

     解决方法:整体上一个思想 :jsp页面建议编码方法统一(以前做的项目统一为UTF-8)

1.页面显示中文乱码解决方法:在页面加%@page pageEncoding="utf-8"

2.传递参数中文乱码:修改server.xml

     <connector port=''8080" protocol="HTTP/1.1"

        maxThreads='"150" connectionTimeout="20000"

           redirectPort="8443"  URIEncoding="UTF-8"/>

然后编写过滤器(Filter)过滤器的编写见文章上部分。

3.国际化中文乱码:a。用JDK的native2ascii工具对资源文件进行转换

                                       b。使用ResourceBundle Editor插件

另外的一些乱码总结:

   1、数据库乱码

  这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:
在数据库连接字符串中加入编码字符集
String Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
并在页面中使用如下代码:
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");

  2、中文作为参数传递乱码

  当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:
在参数传递时对参数编码,比如
RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
然后在接收参数页面使用如下语句接收
keywords=new String(request.getParameter("keywords").getBytes("8859_1"));

String title=new String(request.getParameter("bname").getBytes("iso-8859-1"),"GBK");

  3、JSP页面乱码加这句?

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="err.jsp" %>
4.AJAX向servlet传参:

 

 

假设
keyWord ='中文字符串';

url="play.jsp?
 
keyWord ="+ keyWord 

若按照上述的地址直接访问,则中文会变成乱码。必须使用encodeURI('风声')进行两次编码。如下:

url="play.jsp?
 
keyWord ="+encodeURI(encodeURI( keyWord ))
服务器通过以下方式获取值:

keyWord =URLDecoder.decode( keyWord ,"utf-8");


原创粉丝点击