jsp乱码问题处理,都忘了,整理一下,不要笑话!!

页面输出出现乱码:
       1. <%@ page contentType="text/html; charset=gb2312"%>
       2.<%@ page language="java"  pageEncoding="gb2312"%>
       二者的区别:ContentType属性指定了MIME(MIME表示多用途Internet邮件扩允协议,有效的类型有:text,image, audio,video,applications,multipart和message)类型和JSP页面回应时的字符编码方式;ContentType的charset是指服务器发送给客户端时的内容编码,pageEncoding是jsp文件本身的编码。
表单提交中文时出现乱码:
       1.一般解决办法
               submit.jsp文件表单中有<input type="text" name="name">文本标签其值为中文时,提交到process.jsp后用<%=request.getParameter("name")%>句话输出出现乱码,这是由于服务器端默认的编码是iso-8859-1而我们一般页面设置是gbk所以要将文本编码转换成gbk的,最好用<%=new String(request.getParameter("name").getBytes("iso-8859-1"),"gbk")%>这句话,一定正确(在页面头加上<%@ page contentType="text/html; charset=gb2312"%>或<%@ page language="java"  pageEncoding="gb2312"%>),由于服务器和ie编码的设置不同其他方法都不是通用的。
       2.过滤器解决法
             FilterToChinese.java 文件内容:
             package com.accp.myfilter;
             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 FilterToChinese implements Filter{
                 public void destroy() {      
                 }
                 public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {        
                    request.setCharacterEncoding("GB18030");  
                    chain.doFilter(request,response);
                 }
                 public void init(FilterConfig config) throws ServletException {            
                 }
             }
             web.xml 文件内容:
             <filter>
                 <filter-name>chinese</filter-name>
                 <filter-class>FilterToChinese</filter-class>
             </filter>
             <filter-mapping>
                 <filter-name>chinese</filter-name>
                 <url-pattern>/*</url-pattern>
             </filter-mapping>

       过滤器只能过滤以POST方式提交的中文乱码,而GET方式却无能为力了,GET方式数据经过URL地址栏!
那么在到地址栏的时候,编码方式又被转成了ISO8859_1,所以出现乱码,用new String(request.getParameter("name").getBytes("iso-8859-1"),"gbk")处理从URL地址上获取来的数据。
只要涉及中文的地方全部是乱码,解决办法:在数据库的数据库URL中加上useUnicode=true&characterEncoding=GBK 。

你可能感兴趣的:(jsp,Web,servlet,IE,笑话)