遇到一个乱码的问题,是这样的:
当客户端(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中的中文呢?谢谢~。
当客户端(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中的中文呢?谢谢~。
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之前
把URI字符串采用UTF-8编码各式转化成escape各式的字符串。encodeURI(url)
在selevlet中采用URLDecoder.decode("", "utf-8")来转换