我用的myeclipes+tomcat5.5+oracle在做JAVA WEB现在遇到一个很郁闷的问题 我把所有的编码格式(包括JSP文件 JAVA文件 TOMCAT里面的配置文件 过滤器)全部改成了“UTF-8”的格式但是我在通过表单编辑提交以后 仍然无法得到中文 全部是"?????"我是用的servlet在接受表单传递的值 在我servlet里面得到的就已经是?????了 请问这个是什么原因

解决方案 »

  1.   

    少用url后跟中文参数,如果跟的话,需要在tomcat的server.xml里面设置uriencodeing=“utf-8”
    看一下你的jsp页面的编码格式是否为utf-8,如果不是,改成utf-8
      

  2.   

    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {

    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    chain.doFilter(request, response);
    }
    这个是我的过滤器 你们所说的编码格式我都改了的 还是无法正常显示中文
      

  3.   

    过滤器里设置编码不应该是GBKkcg? 为什么会是UTF-8呢?
      

  4.   

    过滤器里设置编码不应该是GBK? 为什么会是UTF-8呢?
      

  5.   

    我记得解决中文乱码问题应该设置成GBK吧。
      

  6.   

    请确定你是用的POST提交,你这种过滤器只能针对POST提交  确定表单的method=“post”
      

  7.   

    我也设置过 GBK 还是无法解决 所以我很迷惑而且我记得UTF-8是能自动识别中文的
      

  8.   

    帖点代码吧jsp,servlet的.只是描述,看不出问题地.
      

  9.   

    这个是servlet的
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.setContentType("text/html; charset=UTF-8");
    int id = ToolKit.object2Int(request.getParameter("id"));
    String name = ToolKit.object2String(request.getParameter("name"));
    String psw = ToolKit.object2String(request.getParameter("psw"));
    String year = ToolKit.object2String(request.getParameter("Year"));
    String month = ToolKit.object2String(request.getParameter("Month"));
    String day = ToolKit.object2String(request.getParameter("Day"));
    String birthday=year+"-"+month+"-"+day;
    String education = ToolKit.object2String(request.getParameter("education"));
    String eduinformation = ToolKit.object2String(request.getParameter("eduInformation"));
    String workexp = ToolKit.object2String(request.getParameter("workExp"));
    //workexp=new String(workexp.getBytes("ISO-8859-1"),"gbk");
    String type = ToolKit.object2String(request.getParameter("type"));
    UserDAO userDAO = new UserDAO();
    User user = new User(id, name, psw, birthday, education, eduinformation,workexp); if (type.equals("save")) {//add
    String psw1=ToolKit.object2String(request.getParameter("psw1"));
    User Account=new User(ToolKit.randomID(),name,psw1,birthday,education,eduinformation,workexp);
    userDAO.save(Account);
    request.setAttribute("tip", "add success!");
    request.getRequestDispatcher("/user/list.jsp").forward(request, response);

    } if (type.equals("update")) {//edit
    System.out.println(eduinformation+"***"+new String(workexp.getBytes("UTF-8"),"GBK"));
    userDAO.update(user);
    request.setAttribute("tip", "edit success!");
    request.getRequestDispatcher("/user/list.jsp").forward(request, response);


    } if (type.equals("del")) {//del
    userDAO.del(user);
    request.setAttribute("tip", "del success!");
    request.getRequestDispatcher("/user/list.jsp").forward(request, response);
    } if (type.equals("relog")) {
    request.getSession().invalidate();
    request.setAttribute("tip", "ע��ɹ�!");
    request.getRequestDispatcher("/index.jsp").forward(request, response);
    }
    }
      

  10.   

    过滤器的
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {

    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    chain.doFilter(request, response);
    }
      

  11.   

    JSP编辑页面的<%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
    <%@page import="com.tb.hr.util.ToolKit"%>
    <%@page import="com.tb.hr.user.dao.UserDAO"%>
    <%@page import="com.tb.hr.user.bean.User"%>
    <body>
    <fieldset>
    <legend>
    编辑
    </legend>
    <form action="UserProcess" method="POST">
    <input type="hidden" value="update" name="type" />
    ID:
    <input type="text" name="id" value="<%=user.getId()%>" size="20" />
    <br>
    Name:
    <input type="text" name="name" value="<%=user.getName()%>" size="20" />
    <br>
    Psw:
    <input type="password" name="psw" value="<%=user.getPsw()%>" size="21" />
    <br>
    Birthday:
    <SELECT NAME="Year" SIZE="1" >
    <OPTION VALUE="<%= birthday[0]%>" SELECTED><%= birthday[0]%></OPTION>
    <% for(int i=1970;i<2004;i++){
    %>
    <OPTION VALUE="<%= i %>"><%=i  %>
    <% }%>
    </SELECT>&nbsp年

    <SELECT NAME="Month" SIZE="1">
    <OPTION VALUE="<%= birthday[1]%>" SELECTED><%= birthday[1]%>
    <OPTION VALUE="1">01
    <OPTION VALUE="2">02
    <OPTION VALUE="3">03
    <OPTION VALUE="4">04
    <OPTION VALUE="5">05
    <OPTION VALUE="6">06
    <OPTION VALUE="7">07
    <OPTION VALUE="8">08
    <OPTION VALUE="9">09
    <OPTION VALUE="10">10
    <OPTION VALUE="11">11
    <OPTION VALUE="12">12
    </SELECT>&nbsp月

    <SELECT NAME="Day" SIZE="1">
    <OPTION VALUE="<%= birthday[2]%>" SELECTED><%= birthday[2]%>
    <OPTION VALUE="1">01
    <OPTION VALUE="2">02
    <OPTION VALUE="3">03
    <OPTION VALUE="4">04
    <OPTION VALUE="5">05
    <OPTION VALUE="6">06
    <OPTION VALUE="7">07
    <OPTION VALUE="8">08
    <OPTION VALUE="9">09
    <OPTION VALUE="10">10
    <OPTION VALUE="11">11
    <OPTION VALUE="12">12
    <OPTION VALUE="13">13
    <OPTION VALUE="14">14
    <OPTION VALUE="15">15
    <OPTION VALUE="16">16
    <OPTION VALUE="17">17
    <OPTION VALUE="18">18
    <OPTION VALUE="19">19
    <OPTION VALUE="20">20
    <OPTION VALUE="21">21
    <OPTION VALUE="22">22
    <OPTION VALUE="23">23
    <OPTION VALUE="24">24
    <OPTION VALUE="25">25
    <OPTION VALUE="26">26
    <OPTION VALUE="27">27
    <OPTION VALUE="28">28
    <OPTION VALUE="29">29
    <OPTION VALUE="30">30
    <OPTION VALUE="31">31
    </SELECT>&nbsp日
    <br>
    Education:
    <input type="text" name="education" value="<%=user.getEducation() %>"/>
    <br>
    EduInformation:<br>
    <textarea rows="5" cols="80" name="eduInformation"><%=user.getEduInformation() %></textarea>
    <br>
    WorkExp:<br>
    <textarea rows="5" cols="80" name="workExp"><%=user.getWorkExp() %></textarea>
    <br><br>
    <input type="submit" value="提交" />
    </form>
    </fieldset>
    </body>
      

  12.   

    建议楼主看看这个帖子: 
    http://topic.csdn.net/u/20090811/19/e7d6b4ea-6db4-4bd9-9417-28c528fa9cfb.html
      

  13.   

     过滤器这样配置试试 
    public void doFilter(ServletRequest request, ServletResponse response, 
    FilterChain chain) throws IOException, ServletException { 
    //设置请求时的编码规范
    request.setCharacterEncoding("UTF-8"); 
    chain.doFilter(request, response); 
    //设置响应时的编码规范
    response.setContentType("text/html;charset=UTF-8"); 
     
    }
      

  14.   

    我测试了,没有问题.String name = ToolKit.object2String(request.getParameter("name")); 不知道你这个ToolKit是做什么用的.
    我直接使用
    String name = request.getParameter("name");//本身就是个String,还转什么...
    System.out.println("名称:"+name);
    没有任何问题.你要确定一下,你的过滤器是不是起作用了.在过滤器里打印点什么.我的测试代码:servlet:
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html; charset=UTF-8");
    String name = request.getParameter("name");
    System.out.println("名称"+name);
    //System.out.println(new String(name.getBytes("ISO8859-1"),"UTF-8"));
                    //不使用过滤器可以直接用这条语句.
    }filter:
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
    ServletException {
    System.out.println("过滤");//测试过滤器是否起作用.
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    chain.doFilter(request, response); }jsp:
    <%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <body>
    <form action="UserProcess" method="POST">
    Name:
    <input type="text" name="name" value="" size="20" />
    <input type="submit" value="提交" /> 
    </form>
    <br> 
    </body>
    </html>web.xml
    <servlet>
    <description></description>
    <display-name>UserProcess</display-name>
    <servlet-name>UserProcess</servlet-name>
    <servlet-class>test.UserProcess</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>UserProcess</servlet-name>
    <url-pattern>/UserProcess</url-pattern>
    </servlet-mapping>
    <filter>
    <filter-name>EncodeFilter</filter-name>
    <filter-class>test.EncodeFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>EncodeFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>servlet和filter在test包下.
      

  15.   

    3中办法处理你这样的问题,第一种是过滤器
    1 :办法
    public class EncodingFilter implements Filter {
    public void destroy() {
    }
    public void doFilter(ServletRequest req, ServletResponse resp,
    FilterChain chain) throws IOException, ServletException {
    req.setCharacterEncoding("GBK");
    chain.doFilter(req, resp);
    }
    public void init(FilterConfig arg0) throws ServletException {
    }
    }
    2:办法 request.setCharacterEncoding("GBK");
    3:办法 String xxx = new String(xxx.getBytes("ISO8859-1"))
    最后一种使用比较少,就是在tomcat 服务器中配置.如果使用的是mysql数据库,也应该都设置成一样的编码!
      

  16.   

    [Quote=引用 18 楼 norwolfli 的回复:]
    我测试了,没有问题.String name = ToolKit.object2String(request.getParameter("name"));不知道你这个ToolKit是做什么用的.
    我直接使用
    String name = request.getParameter("name");//本身就是个String,还转什么...
    System.out.println("名称:"+name);
    没有任何问题.ToolKit.object2String 是一个防止空指针异常的方法
    public static final String object2String(Object o) {
    return o == null ? "" : o.toString();
    }
    不过问题我中文乱码的问题还是算解决了 我的过滤器是这样的写的
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    chain.doFilter(request, response);
    response.setContentType("text/html;charset=UTF-8");
    }这当中的语句   1 2 4少任意一个都会出现乱码