myeclipes的各种中文乱码问题总结

  1 JSP编码乱码
jsp页面开头:
<% @ page language = " java "  contentType = " text/html; charset=UTF-8 "  pageEncoding = " UTF-8 " %>  
 

2 HTML编码乱码
因为jsp包括HTML,而HTML也有编码问题
在HTML标签内

< html >
 
< head >
     
< meta  http-equiv ="Content-Type"  content ="text/html; charset=UTF-8" >   //更改中文编码
      
< title > Insert title here title >
 
head >
 
< body > body >  

html> 
 

3 request获取数据乱码
通过request,response来传递前台和后台的数据时,会产生中文乱码
一般情况都通过对request编码解决:

           request.setCharacterEncoding("utf-8"); 

需要注意的是,这种方式对 URL传参这种JSP请求 是没有作用的。比如: 

< href ="jspRequest.jsp?username=lisi" > url test request(en) a >
 
< href ="jspRequest.jsp?username=李四" > url test request(zh) a >

这种情况仍然会出现乱码,这种URL传参的方式,只能修改服务器tomcat的传输编码格式。
修改tomcat安装文件 apache-tomcat-6.0.43\conf 目录下的server.xml 
图片
添加 URIEncoding="UTF-8" ,就可以处理URL传递参数造成的中文乱码问题了。
 

4 response输出信息乱码
    
response.setContentType("text/html;charset=utf-8");
 

表单提交中文乱码 
对于表单的数据可以使用request.getParameter(“”)的方法获取,但是当表单中出现中文数据的时候就会出现乱码。 
示例代码如下 

<%@ page language= "java" import = "java.util.*" contentType= "text/html;charset=gb2312" %>
     
     Form中文处理示例
    
  
     "2" >
         下面是表单内容:
      
"AcceptFormCharset.jsp" method= "post" >
         用户名: "text" name= "userName" size= "10" />
         密 码: "password" name= "password" size= "10" />
         "submit" value= "提交" >
        
    
  


输出数据的示例代码

<%@ page language= "java" import = "java.util.*"
   contentType= "text/html;charset=gb2312" %>
  
     Form中文乱码
  
  
     "2" > 下面是表单提交以后用request取到的表单数据:
       <%
         String userName = request.getParameter( "userName" );
         String password = request.getParameter( "password" );
         out.println( "表单输入userName的值:" + userName + "
"
);
         out.println( "表单输入password的值:" + password + "
"
);
        %> 
    
  

  
产生种结果的原因是Tomcat中对于post方法提交的表单采用的默认编码为ISO-8859-1,而这种编码格式不支持中文字符。对于这个问题可以采用转换编码格式的方法来解决,现在输出数据的页面改动如下:

  out.println( "表单输入userName的值:" + new String(userName.getBytes( "ISO-8859-1" ), "gb2312" )+ "
"
);
         out.println( "表单输入password的值:" + new String(password.getBytes( "ISO-8859-1" ), "gb2312" )+ "
"
);
先从ISO-8859-1格式的字符串中取出字节内容,然后在用GB2312的编码格式重新构造一个新的字符串。

 

6 Cookie导致的编码问题
 
Cookie由于需要保存在客户端中,因此使用过程中都需要编码以及转码,以实验代码为例:

<%@ page language="java" import="java.util.Date" pageEncoding="UTF-8"%>


   蓝梦集团CRM系统的首页页面

 <%!

    String lastAccessDate=null;

    String nowAccessDate=null;

    Cookie oneCookie=null;

    Cookie[] cookies=null;

    java.util.Date nowDate=null;

  %>

  

  <%

    cookies=request.getCookies();

    nowDate=new java.util.Date();

    if(cookies==null){

       lastAccessDate=(nowDate.getYear()+1900)+"年"+(nowDate.getMonth()+1)+

                 "月"+nowDate.getDate()+"日"+nowDate.getHours()+

                 "时"+nowDate.getMinutes()+"分"+nowDate.getSeconds()+"秒";

       lastAccessDate = java.net.URLEncoder.encode(lastAccessDate,"UTF-8");  
//
中文编码

       oneCookie=new Cookie("lastAccessDate",lastAccessDate);

       //包装到cookie信息中

       oneCookie.setMaxAge(30*24*60*60);  //setMaxAge()?

       response.addCookie(oneCookie);//写到客户机器的磁盘中

    }

    else{

       for(int index=0;index

         if(cookies[index].getName().equals("lastAccessDate")){       

          lastAccessDate=cookies[index].getValue();

          nowDate=new java.util.Date();

          lastAccessDate = java.net.URLDecoder.decode(lastAccessDate,"UTF-8");
//中文解码 

          nowAccessDate=(nowDate.getYear()+1900)+"年"+(nowDate.getMonth()+1)+

                 "月"+nowDate.getDate()+"日"+nowDate.getHours()+

                 "时"+nowDate.getMinutes()+"分"+nowDate.getSeconds()+"秒";//重构访问时间为现在的时间

          nowAccessDate = java.net.URLEncoder.encode(nowAccessDate,"UTF-8");

          oneCookie=new Cookie("lastAccessDate",nowAccessDate);

          oneCookie.setMaxAge(30*24*60*60);

          response.addCookie(oneCookie);

          break;

       }

        

    }

 

   }

    out.println("您上次访问本系统是在:"+lastAccessDate);


    

    

   %>


 

注意:首先引入java.net.*,该包中包含URLEncoder类; 



Ps:网上资料整理

你可能感兴趣的:(J2EE)