做了个投票系统,当添加投票项item时,添加成功了,但是中文乱码,显示的是问号,我测试了下,发现从manage.jsp中获得的additem到add.jsp就无法正常显示中文,可是我有 String additem=new String(request.getParameter("additem").getBytes("iso8859-1"),"GBK");  请问到底是哪里出了问题?
  代码:manage.jsp
<%@page contentType="text/html;charset=GBK" import="java.sql.*" %><%@include file="check.jsp" %>
<jsp:useBean id="db" class="bean.QueryBean" scope="session"/>
<center>
<h2>系统维护</h2>
<table border bordercolor=blue>
<tr><th colspan="3" bgcolor=yellow>删除投票项</th>
<%
    
     request.setCharacterEncoding("GBK"); 
     Connection conn=db.setConnection("movie");
     ResultSet rs=db.getQuery("select * from vote");
     int i=1;
     while(rs.next())
     {
       out.println("<tr>");
       out.println("<td>"+i+"</td>");
       out.println("<td>"+rs.getString("item")+"</td>");
       out.println("<td align='center'><a href='delete.jsp?delid="+rs.getString("id")+"'>删除</a></td>");
       i++;
     }
%>
<tr><th colspan="3" bgcolor=blue>添加投票项</th>    
<tr><td colspan="3">
<form method="post" action="add.jsp">
内容:<input type="text" name="additem" size="30"/>
      <input type="submit" value=提交/>
      <input type="reset" value=重置/>
</form></td>
<tr><td colspan="3" align="center" ><a href="index.jsp">返回投票页面</a></td>
</table>  </td> add.jsp
<%@page contentType="text/html;charset=GBK" import="java.sql.*" %>
<jsp:useBean id="db" class="bean.QueryBean" scope="session"/>
  <%
   request.setCharacterEncoding("GBK"); 
   String additem=new String(request.getParameter("additem").getBytes("iso8859-1"),"GBK");
   System.out.println(additem);
   if(additem!=null)
   {
    String sql="insert into vote(item,c)values('"+additem +"','"+0+"')";
    db.setModify(sql);
    db.close();
    }
   %>
  <jsp:forward page="manage.jsp"/>  

解决方案 »

  1.   

    数据库,开发环境,应用服务器使用统一的字符集,如:utf-8。这样是不会出现乱码的
      

  2.   

    加个过滤器,过滤你的jsp文件<filter>
    <filter-name>EncodeingFilter</filter-name>
    <filter-class>com.sail.cot.common.filter.EncodeingFilter</filter-class>
    <init-param>
    <description>是否配置编码过滤器</description>
    <param-name>useEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    <init-param>
    <description>配置使用的编码格式</description>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>EncodeingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    <url-pattern>/servlet/*</url-pattern>
    <url-pattern>*.action</url-pattern>
    </filter-mapping>
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    HttpServletResponse httpResponse = (HttpServletResponse) response;


    httpRequest.setCharacterEncoding(defaultEncodeing);
    httpResponse.setContentType("text/html; charset=" + defaultEncodeing);
    httpResponse.setCharacterEncoding(defaultEncodeing);
            System.out.println("url is " + httpRequest.getRequestURI());
            //response.setContentType("text/xml;charset=utf-8");
            chain.doFilter(request, response);
    }
      

  3.   

    request.setCharacterEncoding("GBK");  
      String additem=new String(request.getParameter("additem").getBytes("iso8859-1"),"GBK");
     应该这样
    //request.setCharacterEncoding("GBK");  
    String additem=new String(request.getParameter("additem").getBytes("iso8859-1"),"GBK");
    要么request.setCharacterEncoding("GBK"); 
    String additem= request.getParameter("additem");
     // String additem=new String(request.getParameter("additem").getBytes("iso8859- //1"),"GBK");
      

  4.   

    就是我的manage.jsp页面从add.jsp页面获得的item项是显示乱码的,怎么解决?刚试了下过滤器,可是运行时显示404错误啊!好像这种问题不用过滤器也能解决吧?