import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class Survey extends HttpServlet { private static final long serialVersionUID = 1L; public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//response.setContentType("text/html;charset=utf-8");
this.doPost(request, response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println("  <BODY>");
request.setCharacterEncoding("utf-8");
out.println("姓名:"+request.getParameter("name"));
out.println("Email:"+request.getParameter("email"));
out.println("年龄:"+request.getParameter("age"));
/* String os[] = request.getParameterValues("os");
for(int i=0;i<os.length;i++){
out.println("操作系统:"+request.getParameter(os[i]));
}*/
out.println("编程时间:"+request.getParameter("code"));
/* String language[] = request.getParameterValues("language");
for(int i=0;i<language.length;i++){
out.println("编程语言:"+request.getParameter("language"));
}*/
out.println("建议:"+request.getParameter("comment"));
out.println("  </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}}大家帮我看一下为什么会造成中文乱码,HTML页面中设置的编码方式也是UTF-8。

解决方案 »

  1.   

    刚才我把response.setContentType("text/html;charset=utf-8");改成response.setContentType("text/html;charset=GBK");就可以正确显示中文了,但是还不明白为什么utf-8在这里不能显示中文,而其他程序就可以正确显示中文呢?
      

  2.   

    好像j2ee的程序对这方面要求特别严格,我记得utf-8是西文编码,不过我都是用的GB18030,GBK对繁体字显示有影响
      

  3.   

    utf-8也可以啊,这里需要在设置完response后把request.setCharacterEncoding("utf-8");也设置上,另外对于乱码问题还可以在tomcat 的 conf 目录下有一个server.xml文件,在设置端口的地方加上URIEncoding="utf-8"。 
      
      <Connector port="8888" protocol="HTTP/1.1" 
                  connectionTimeout="20000" 
                  redirectPort="8443" URIEncoding="utf-8"/
      

  4.   

    这是很正常的........
    乱码问题会出现在:
    JSP编译为SERVLET的时候
    在用户请求的时候
    在服务器转换中文字符为unicode编码的时候针对国内网站可以使用GBK2312。
    针对合资企业可以使用UTF-8。
    支持国际化可以使用UTF-8。
      

  5.   

    我的Myeclipse中默认编码是GBK其他程序我只要设置下response.setContentType("text/html;charset=utf-8");和request.setChracterEncoding("UTF-8");就可以正确显示中文,然而这个程序就不可以。
      

  6.   

    楼主还是用GBK或者GBK2312编码不会出现乱码
      

  7.   

    request.set--Charcar..("gbk"); // reqeust也要设置中文的
    response.setContentType("text/html;charset=utf-8");
      

  8.   

    这两句都加上了,就是显示不出中文,我把MyEclipse的默认编码换成UTF-8就可以了,GBK就是不行!
      

  9.   

    你在myeclpse里面吧编码 设置为GB18030应该就可以了
      

  10.   

    Myeclips中设置的默认编码是GBK其他程序可以正确显示中文,大家帮我看看我的这段代码有没有问题!
      

  11.   

    String name= request.getParameter("name");
    try {
    name= new String(name.getBytes("iso-8859-1"),"GBK");
    } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    数据交互过程中很容易出现乱码,有时候设置GBK或GB2312都不好用,在接收的地方可以用上面的代码转化一下,可以解决乱码。
      

  12.   

    在Servlet里面编码转换出现乱码的原因很多,你可以在配置文件web.xml里面添加一个编码过滤器,这样就会减少乱出现的机会。
      

  13.   

    问题还是没有解决,大家讲的方法可以解决乱码问题,找不到问题的根源看来还是跟JDK底层的一些东西有关吧!