在提交了一次add后,选择列表中的中文都变成了"????????",为什么?

 所属目录:Java   |   类型:技术问答   |   时间:2007-05-21
 问题:

问题如题  
   
  carts.html:  
  <html>  
  <head>  
  <title>请选择cd</title>  
  </head>  
  <body>  
  <form   action   =   "carts.jsp"   method="post">  
  <select   name="item">  
  <option   selected>阿甘正传</option>  
  <option>狮子王</option>  
  <option>云中漫步</option>  
  <option>秋日传奇</option>  
  </select>  
  <p>  
  <input   type="submit"   name="submit"   value="add"><br>  
  <input   type="submit"   name="submit"   value="remove"><br>  
  </form>  
  </body>  
  </html>  
   
  carts.jsp:  
  <%@   page   contenttype="text/html;charset=gbk"%>  
  <%  
  request.setcharacterencoding("gbk");  
  %>  
  <html>  
  <jsp:usebean   id="cart"   scope="session"   class="sessions.dummycart"   />  
  <jsp:setproperty   name="cart"   property="item"       value="<%=request.getparameter(\"item\")%>"/>  
  <jsp:setproperty   name="cart"   property="submit"   value="<%=request.getparameter(\"submit\")%>"/>  
  <%  
  cart.processrequest();  
  %>  
  <font   size   =   5   color="#cc0000">  
  <br>   您当前选择了如下cd:  
  <ol>  
  <%    
  string[]   items   =   cart.getitems();  
  for   (int   i=0;   i<items.length;   i++)   {  
  %>  
  <li>   <%=   items[i]   %>    
  <%  
  }  
  %>  
  </ol>  
  </font>  
  <hr>  
  <%@   include   file   ="carts.html"   %>  
  </html>  
   
  dummycart.java:  
  package   sessions;  
  import   java.util.vector;  
  import   java.util.enumeration;  
  public   class   dummycart   {  
          vector   v   =   new   vector();  
          string   submit   =   null;  
          string   item   =   null;  
          private   void   additem(string   name)   {  
  v.addelement(name);  
          }  
          private   void   removeitem(string   name)   {  
  v.removeelement(name);  
          }  
          public   void   setitem(string   name)   {  
  item   =   name;  
          }  
          public   void   setsubmit(string   s)   {  
  submit   =   s;  
          }  
          public   string[]   getitems()   {  
  string[]   s   =   new   string[v.size()];  
  v.copyinto(s);  
  return   s;  
          }  
          public   void   processrequest()   {  
  if   (submit.equals("add"))  
          additem(item);  
  else   if   (submit.equals("remove"))    
          removeitem(item);  
  //   reset   at   the   end   of   the   request  
  reset();  
          }  
          //   reset  
          private   void   reset()   {  
  submit   =   null;  
  item   =   null;  
          }  
  }  
   
 

· 网友精彩回答:

发表者:blackpark

include     一个htm文件在tomcat5很容易出乱码的。  
  这篇文章对你有用。  
  http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageid=752

发表者:guo__peng

jsp中文乱码小议  
                          -------郭鹏  
  jsp是一个很热门的话题,但让大多数人都头痛的是jsp页面中的乱码问题,笔者身有体会;曾为了解决中文乱码问题郁闷了好几天,试了很多方法都不行。最后在jsp专业人士的帮助下,终于解决。之后笔者曾对此做了一些小的研究。  
  首先我们先了解一下问题的原因。一般情况在在每个jsp页的头部都有这样一条语句:  
  <%   page   contenttype="text/html;   charset=gb2312"   %>这条语句决定了此页面使用gb2312编码形式,而在数据库中一般用的是iso-8859-1字符集存储数据.   而java程序在处理字符时默认采用统一的iso-8859-1字符集(体现java国际化思想),所以在添加数据时,默认的字符集编码是iso-8859-1,而页面采用的是gb2312,所以就出现乱码问题。为解决此问题应在存储的时候把gb2312换转成iso-8859-1。有此时候在读出时也会出现乱码,那么只需反过来就可以了,把iso-8859-1转换成gb2312。  
  具体实例归纳了以下几点,也许会对大家有一些帮助。  
  1、 在建立jsp页面时应该注意在jsp页面的头部加入一下代码  
  <%   page   contenttype="text/html;   charset=gb2312"   %>  
  此方法是解决jsp页面显示时的乱码。  
  2、 有时还需在html代码中的<head></head>中加入这句  
  <meta   http-equiv="content-type"   content="text/html;   charset=gb2312">  
  3、 在bean中用的是iso-8859-1编码,在jsp中一般用gb2312编码,处理此类乱码问题如下  
  string   str=new   string(strname.getbytes(“iso-8859-1”),”gb2312”);  
  具体用到此方法的地方为,当提交表单到bean表单提交后,数据库中存入的数据确变成了????,因此在调用bean之前应对编码进行转换,方法:string   str=new   string(request.getparameter().getbytes(“iso-8859-1”),”gb2312”);  
  这样,存入数据库的数据库的数据就可见了。  
  4、 对于页面间的参数传递也可以用这个方法来处理乱码问题:  
        public   string   getstr(string   str)  
        {  
                try  
        {  
              string   temp_p=str;  
      byte[]   temp_t=temp_p.getbytes("iso8859-1");  
      string   temp=new   string(temp_t);  
      return   temp;  
        }  
        catch(exception   e)  
        {}  
        return   "null";  
  }  
  5、 在表单定义时加上这个属性有时也可以解决表单提交过程中出现的乱码  
  <form   enctype="multipart/form-data"></form>  
  6、 提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用utf-8编码方式来发送请求,而utf-8和gb2312编码方式表示字符时不一样,这样就出现了不能识别字符。解决办法:通过request.setcharacterencoding("gb2312")对请求进行统一编码,就实现了中文的正常显示。  
   
   
 

.
处理 SSI 文件时出错
© 2006-2008 All Rights Reserved