论坛首页 Java企业应用论坛

令人恼火的UTF-8中文问题

浏览 12180 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2006-10-27  
我实在是气不过了,再在这里问一下:

在Tomcat 5.5中,我写了个Servlet,希望能读取在URL中的中文数据,如:http://localhost:8080/csj/ch04/testServlet?name=牛人,结果竟得到的是一堆乱码,于是查完所有google,baidu,找到一些网上的解决方法,结果还是不行,大家教教我该怎么做?

我的做法是这样的:
在tomcat中,修改:conf/server.xml,把<Connector....>中加入URIEncoding="UTF-8",
然后在Servlet的doGet,doPost最前面加入:
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");

但是在输出name变量时却是乱码,为什么?下面是我的代码:
//ServletUtils是输出Html的工具类,已包含
//<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

public class GetParameterServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws IOException, ServletException {
        
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        ServletUtilities util = new ServletUtilities(out);
        
        String name = request.getParameter("name");
        String sex  = request.getParameter("sex");
        
        String content = "name: " + name + "<br>\n";
        content += "sex: " + sex + "<br>\n";
        content += "charset: " + request.getCharacterEncoding() + "<br>\n";
        content += "<a href=\"?sex=我\">next</a>";
        String title = "Get parameter test";
        
        util.print(title, content);
        out.close();
    }
    
    public void doPost(HttpServletRequest request, HttpServletResponse response) 
        throws IOException, ServletException {
            doGet(request, response);
    }
}


网上很多人都说这样的方法可以行得通,可是我却行不通,是不是我做漏了哪一步了?
   发表时间:2006-10-27  
http://localhost:8080/csj/ch04/testServlet?name=牛人

你通过url直接写当然不行

这里的“牛人” 是gbk编码,  专程utf-8当然是乱马
0 请登录后投票
   发表时间:2006-10-27  
那该怎么做啊?
0 请登录后投票
   发表时间:2006-10-27  
IE不是以UTF-8格式上传请求的吗?
0 请登录后投票
   发表时间:2006-10-27  
通过页面输入。。
0 请登录后投票
   发表时间:2006-10-27  
我在页面里加入<a href="http://localhost:8080/csj/ch04/testServlet?name=牛人">next</a>,这样的方式也不行。
0 请登录后投票
   发表时间:2006-10-27  
把连接中中文通过转换成另一种编码
就是用%的那种,就没问题了(好像叫什么base64什么的)
0 请登录后投票
   发表时间:2006-10-27  
这是一种方法,但是有没有别的方法呢?
0 请登录后投票
   发表时间:2006-10-27  
POST or new String(name.getBytes("ISO-8859-1"),"UTF-8")
0 请登录后投票
   发表时间:2006-10-27  
直接一个filter么,好了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics