是个老问题了,不过当QueryString中参数值存在中文.
我用String name=java.net.URLEncoder.encode("小王","GBK");
String url="helloservlet?name="+name;
然后用了
request.getRequestDispatcher(url).forward(request,response);
在helloservlet中进行了必要的中文转换处理,此时得到了正确的结果,没有任何乱码问题.
如果从浏览器直接访问该URL,就出现了乱码问题.
网上查了一些资料,提到的方法都用到了,request.setCharacterEncoding("GBK");
在Tomcat的server.xml中添加URIEncoding="GBK"都试过了,都没有用
不知道该怎么办了?
请各位高手帮忙啊!!!

解决方案 »

  1.   

    在 servlet文件中 
      PrintWriter out = response.getWriter();
      之前加上
      response.setContentType("text/html;charset=UTF-8");
    就OK了!
      

  2.   

    中文编码一直是java中的一个比较痛苦的问题,我也曾遇到过这些问题比较彻底的方法是:所有的页面代码,资源全部使用utf-8编码,这样就可以避免。如果你执意要使用gbk或者gb2312来编码的话,每次接受参数应该对参数重新编码,如下:String param=request.getParameter("name");
    param=new String(param.getBytes(),"gb2312");
      

  3.   

    两位提到的解决方法我一直都用的,我所提到的问题都不能解决.
    并且为何我用request.getRequestDispatcher().forward()的方式就能解决这个问题
    直接用浏览器发送此URL就出问题了呢?应该做何解释呢?看来也只能尝试所有页面和资源都采用UTF-8编码了,如果能避免在get中出现中文就避免吧.
    只是觉得应该没有解决不了的问题,只是我还不知道罢了:(
      

  4.   

    我用的几个方法:
    1.加过滤器(确保页面之间的编码统一)
    2.自己在程序里转str = new String(str.getBytes("ISO8859_1"),"GBK");
      

  5.   

    你是在服务器端处理的中文转码,用forward()是没有问题的
    你在浏览器发送必有问题是正常的,
    建意加个过滤器
      

  6.   

    String name = new String(request.getParameter("name").getBytes("iso-8859-1"),"gbk");
    name为地址栏name=中文,传过来的,运行可行,因为在地址栏输入默认是gbk,而get传参数是要先骗马为iso8859-1再传的,所以要先用iso-8859-1来解码,再用gbk编码为一个新字符串,ok!