Student.javapackage test8;
public class Student{
 String name=null;
 long number;
 double height,weight;
 public String getName(){
    try{
      byte b[]=name.getBytes("gbk2312");
      name=new String(b);
      return name;
     }
       catch(Exception e){
         return name;
        }
       }
        public void setName(String newName)
        {
         name=newName;
       }
         public long getNumber()
         {
            return number;
          }
           public void setNumber(long newNumber)
           {
              number=newNumber;
            }
             public double getHeight()
             {
                 return height;
                }
                 public void setHeight(double newHeight)
                 {
                    height=newHeight;
                  }
                    public double getWeight()
                    {
                       return weight;
                     }
                       public void setWeight(double newWeight)
                       {
                         weight=newWeight;
                        }
                       }student.jsp<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="test8.Student"%>
<html>
<body bgcolor="#00FFFF">
<font size="10">
<jsp:useBean id="zhang" class="test8.Student" scope="page"></jsp:useBean>
<jsp:setProperty name="zhang" property="name" value="张三"/>
<p>名字是:<jsp:getProperty name="zhang" property="name"/>
<jsp:setProperty name="zhang" property="number" value="11100"/>
<P>学号是:<jsp:getProperty name="zhang" property="number"/>
<% double height=1.70;%>
<jsp:setProperty name="zhang"  property="height" value="<%=height+0.05%>"/>
<p>身高是:<jsp:getProperty name="zhang" property="height"/>米
<jsp:setProperty name="zhang" property="weight" value="67.29"/>
<p>体重是:<jsp:getProperty name="zhang" property="weight"/>公斤
</p>
</p></P></p></font></body>
</html>student2.jsp<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="test8.Student"%>
<html>
<body>
<form action="" method="post">
<p>输入学生的姓名:<input type="text" name="name" ></p>
<P>输入学生的学号:<input type="text" name="number"></P>
<p>输入学生的身高:<input type="text" name="height"></p>
<p>输入学生的体重:<input type="text" name="weight"></p>
<input type="submit" value="提交" >
</form>
<jsp:useBean id="zhang" class="test8.Student" scope="page"></jsp:useBean>
<jsp:setProperty name="zhang" property="*"/>
<p>名字是:<jsp:getProperty name="zhang" property="name"/>
<P>学号是:<jsp:getProperty name="zhang" property="number"/>
<p>身高是:<jsp:getProperty name="zhang" property="height"/>米
<p>体重是:<jsp:getProperty name="zhang" property="weight"/>公斤
</p>
</p></P></p></body>
</html>
问题就是当"byte b[]=name.getBytes("gbk2312")"中,字符设置成"gbk"或"gb2312"时,student.jsp代码可以显示出中文,但student2.jsp却出现乱码,设置成"iso-8859-1"时却相反,student.jsp出现乱码,student2.jsp却显示正常。实在不知怎么设置了,希望大家指点下

解决方案 »

  1.   

    把分给来
    byte b[]=name.getBytes("ISO-8859-1");
    String toEncoding = "GB2312";
      name=new String(b,toEncoding); 给分吧
      

  2.   

    不行啊,楼上两位,用"UTF-8之后,两段代码打出的字都是其他的字符,不是我传送的那个值。2楼的我也试了,也不行。
      

  3.   

    你这里没必要用byte b[];因为字节数组与字符串的存在的内存分配是不一样的。
    你直接用name=new String(b,"gbk"); 就行了。
      

  4.   

    系统中的JSP涉及到编码的全部改为UTF-8
    还有就是filter中关于编码的设置也全设置为UTF-8
    这个filter可以google一下写法,或者spring也提供一种web.xml配置方式
      

  5.   

    答:问题的真正根源在于:
    student.jsp向Student bean赋值数据与student2.jsp向Student bean用表格的POST方式提交数据时,两者的字符编码是不同的.
    这就是你说的:student.jsp与student2.jsp总是一个对了,另一个就会错了.
    要想使两个jsp同时成立,我想不得不对student2.jsp加入如下代码就行了:(这样:student.jsp与student2.jsp都会正确了)
    在student2.jsp中的<jsp:setProperty name="zhang" property="*"/> 之后,加入
    如下代码:
    <%
    String newn=request.getParameter("name");
    if(newn!=null)
      newn=new String(newn.getBytes("iso-8859-1"),"gb2312");
     %>
    <jsp:setProperty name="zhang" property="name" value="<%=newn %>" 
    //后面的代码就是你原来的代码:
    <p>名字是: <jsp:getProperty name="zhang" property="name"/> 
    <P>学号是: <jsp:getProperty name="zhang" property="number"/> 
    ........
      

  6.   

    [Quote=引用 4 楼 lgcsyq 的回复:]
    你这里没必要用byte b[];因为字节数组与字符串的存在的内存分配是不一样的。 
    你直接用name=new String(name.getByte("ISO-8859-1"),"gbk"); 就行了。 
      

  7.   

    答:这样做是不行的.这样做,student.jsp出现乱码,student2.jsp显示正常.请看清楼主的问题.
      

  8.   

    你用tomcat的话看一下 server.xml    
        <Connector port="8080"   maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" URIEncodeing="gb2312" />
    如果URIEncodeing没有设置的话默认是"ISO-8859-1" 如果你设置了话就不需转码了~可以试试
      

  9.   

    答:不会吧?在我的机器上student.jsp与student2.jsp都正确不乱码了,试验几次后,才向楼主发回贴的啊.
      

  10.   

    答:
    1)你的三个文件的编码全为gb2312,没有改动它.注:Student.java中
    byte b[]=name.getBytes("gbk2312"); 改为:byte b[]=name.getBytes("gb2312"); 
    2)tomcat的 server.xml  中我原来就有的:  
    <Connector port="8080"   maxHttpHeaderSize="8192"
                   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   connectionTimeout="20000" disableUploadTimeout="true" URIEncodeing="gb2312" />
    3)在student2.jsp中的 <jsp:setProperty name="zhang" property="*"/> 之后,只加入如下代码<% 
    String newn=request.getParameter("name"); 
    if(newn!=null) 
      newn=new String(newn.getBytes("iso-8859-1"),"gb2312"); 
    %> 
    <jsp:setProperty name="zhang" property="name" value=" <%=newn %>" 就都正确了.我就是这么做的,现在又试验了几次,两个jsp显示都正确,没有乱码啊.
      

  11.   

    我的tomcat6.0 sever.xml下,找不到你说的那段代码,我把开头"<?xml version='1.0' encoding='utf-8'?>"改成<"encoding="gb2312">了,把后面代码加上去之后提示:
    "/student2.jsp(22,0) According to TLD, tag jsp:setProperty must be empty, but is not
    org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
    org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:132)
    org.apache.jasper.compiler.Parser.parseBody(Parser.java:1644)
    ......."此类错误。
    我的浏览器编码都设成"gb2312"了。唉,真不知哪里我的为什么编译不成功,麻烦你们了,我都不好意思了。
      

  12.   

    我说的studetn2.jsp乱码指的是输入"姓名" 按"提交"按钮出现的乱码,并不是原来页面显示出现乱码
      

  13.   

    答:我知道:保证studetn2.jsp按"提交"按钮时所输入的姓名中的汉字,不出现乱码.我这儿没有问题.不过我用的是Tomcat5.5.23.那个server.xml就是它当中改的.Tomcat6.0就没有测试过.
      

  14.   

    这里有解决办法,我试了,可以。可是已经结帖了。
    http://archaic.blog.hexun.com/5576058_d.html