遇到一个乱码的问题,是这样的:
当客户端(jsp页面)向服务器端(Servlet)发送请求时,如果是用form表单请求,数据中若含有中文,在Servlet的dopost()方法中设置 request.setCharacterEncoding("utf-8"),中文数据就能正常显示。可是如果是url请求且其中含有中文,在服务器端仍然读取不到中文,是乱码。
比如:
   <form action="EncodingServlet"  method="post" >  
            姓名:<input name="name"  value="你好"><br>
            <input type="submit" value="submit">
    
    </form>
在服务器端:(dopost())
 request.setCharacterEncoding("utf-8");
 request.getParameter("name");中文“你好”能正常显示。当用ajax,
   var url="<%=request.getContextPath()%>/getSchoolsServlet?name=你好";
   xmlHttpRequest.open("post",url,true);
   xmlHttpRequest.send(null);
此时在服务器端:(dopost())
 request.setCharacterEncoding("utf-8");
 request.getParameter("name");
显示的中文却是乱码。这时候得重新编码url :url=encodeURI( encodeURI(url)); 
然后在服务器端解码:java.net.URLDecoder.decode(name, "UTF-8");才能正常读取。1 为什么表单请求和url请求会有这样的差异呢?
2 有没有更好的办法不用编码解码就能正常获取url中的中文呢?谢谢~。

解决方案 »

  1.   

    编码机制不同,表单POST数据,与页面编码格式一致。而URL编码则会匹配服务器默认字符集。建议设置应用服务器的缺省字符集,不同服务器设置方式不一样,具体可以Google。建议统一设置为UTF-8,然后所有JSP页面也都写上UTF-8,你就没啥烦恼了。
      

  2.   

    乱码问题:客户端提交中文,servlet中获取的是乱码:
      a:如果是get方式,在tomcat中,在conf/server.xml文件中8080端口的connector元素增加URIEncoding="utf-8"
      b:如果是post方式,在servlet中,request.setcharactorEncoding("utf-8");放在request.getparameter之前
      servlet相应中文,客户端显示乱码:response.setCharactorEncoding("utf-8");该代码要放在
    response.getWriter之前
      

  3.   

    关于jsp页面用get方式向后台传递参数的时候,先用encodeURI() :
    把URI字符串采用UTF-8编码各式转化成escape各式的字符串。encodeURI(url)
    在selevlet中采用URLDecoder.decode("", "utf-8")来转换