帮别人做的  servlet的过滤器还不会。
把数据插到access中就是乱码!但是如果插入数字就没有问题,试过“UTF-8”。
有人说是getBytes()的问题,说它是一个字符的传 而汉字一个字是两个字符!但是用什么替换呢! 
谢谢各位大侠了!
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="GBK"%>
<html>
  <head>
  </head>
 <body>
 <% 
             request.setCharacterEncoding("GBK"); 
             Connection con=null;
    Statement smt=null; 
    ResultSet rs=null;
    try{  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
       }
    catch(ClassNotFoundException e)
       {  out.print(e);
       }
    try { con=DriverManager.getConnection("jdbc:odbc:huojiang","",""); //注意数据源的名称,用户名和密码,ODBC连接
          smt=con.createStatement();
     }
   catch(SQLException e) 
     {  out.print(e);
     }
  
        String  xiangmu = new String(request.getParameter("xiangmu").getBytes("ISO8859_1"),"GBK");
String  dengji = new String(request.getParameter("dengji").getBytes("ISO8859_1"),"GBK");
    String  name = new String(request.getParameter("name").getBytes("ISO8859_1"),"GBK");
    String  time = new String(request.getParameter("time").getBytes("ISO8859_1"),"GBK");
    String  teacher = new String(request.getParameter("beizhu").getBytes("ISO8859_1"),"GBK");
    String  beizhu = new String(request.getParameter("name").getBytes("ISO8859_1"),"GBK");
            String sql = "INSERT INTO shijian(竞赛项目,时间,获奖等级,获奖人,指导教师,备注) values(?,?,?,?,?,?)";
PreparedStatement prepstmt = null;
prepstmt=con.prepareStatement(sql);
prepstmt.setBytes(1,xiangmu.getBytes("GBK"));
prepstmt.setBytes(2,time.getBytes("GBK"));
prepstmt.setBytes(3,dengji.getBytes("GBK"));
prepstmt.setBytes(4,name.getBytes("GBK"));
prepstmt.setBytes(5,teacher.getBytes("GBK"));
prepstmt.setBytes(6,beizhu.getBytes("GBK"));
    prepstmt.executeUpdate();
    System.out.println();
    

  %>
      <h1><a href="show.jsp">返回继续添加信息</a></h1>
      <h1><a href="index.jsp">返回首页</a>  </h1>
  </body>
</html>