Java Web开发的Servlet乱码问题
在Servlet中输出中文信息时,网页显示乱码,如下图我在以下三个地方已经设置了字符集:(1)、Servlet设置为:UTF-8;(2)、web.xml设置:<?xmlv...
在Servlet中输出中文信息时,网页显示乱码,如下图
我在以下三个地方已经设置了字符集:
(1)、Servlet设置为:UTF-8;
(2)、web.xml设置:
<?xml version="1.0" encoding="UTF-8"?>
并且添加:
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
(3)、在Tomcat 的conf/server.xml中修改编码为:
<?xml version='1.0' encoding='utf-8'?>
还是没能解决乱码问题,不知道该然后解决?
Servlet部分代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
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("<meta http-equiv = \"content-type\"content=\"text/html; charset=utf-8\">");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
String requestURI = request.getRequestURI();//获取URI路径
out.println("<form action'"+requestURI+"'method='post'>");
out.println("请输入您的名字:<input type='text' name='name' />");
out.println("<intput type='submit' />");
out.println("<form />");
out.println("");
String name = request.getParameter("name");//获取浏览器提交的name参数
if(name!=null && name.trim().length()>0){//如果name不为空且长度大于0
out.println("您好! <b>"+name+"<b />。欢迎来到Java Web 世界.");
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close(); //关闭out
} 展开
我在以下三个地方已经设置了字符集:
(1)、Servlet设置为:UTF-8;
(2)、web.xml设置:
<?xml version="1.0" encoding="UTF-8"?>
并且添加:
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
(3)、在Tomcat 的conf/server.xml中修改编码为:
<?xml version='1.0' encoding='utf-8'?>
还是没能解决乱码问题,不知道该然后解决?
Servlet部分代码如下:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");
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("<meta http-equiv = \"content-type\"content=\"text/html; charset=utf-8\">");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
String requestURI = request.getRequestURI();//获取URI路径
out.println("<form action'"+requestURI+"'method='post'>");
out.println("请输入您的名字:<input type='text' name='name' />");
out.println("<intput type='submit' />");
out.println("<form />");
out.println("");
String name = request.getParameter("name");//获取浏览器提交的name参数
if(name!=null && name.trim().length()>0){//如果name不为空且长度大于0
out.println("您好! <b>"+name+"<b />。欢迎来到Java Web 世界.");
}
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close(); //关闭out
} 展开
4个回答
展开全部
首先说,你修改那两个文件的编码,没有任何作用。
j2ee项目中出现乱码的原因是:
浏览器对你输入的中文参数进行了编码。
然后web服务器对你的参数进行了解码。
如果浏览器的编码,和web服务的解码,应用了相同编码的话,就不会用乱码。否则一定乱码。
解决方案:
因为,浏览器的编码未知,服务器的编码未知,所以只能尝试。
String name = request.getParameter("name");//获取浏览器提交的name参数
name = new String(name.getBytes("encode1"), "encode2");
encode1:指的是web服务器的编码,encode2:指浏览器所在操作系统的编码。
1、项目统一采用utf-8编码
2、用javascript对页面中得参数进行编码。(因为不同浏览器编码可能不同)
encodeURI();
3、服务器端,用相同的编码方法进行解码。推荐过滤器,request.setCharacterEncoding("UTF-8");
4、尽量使用post提交。
j2ee项目中出现乱码的原因是:
浏览器对你输入的中文参数进行了编码。
然后web服务器对你的参数进行了解码。
如果浏览器的编码,和web服务的解码,应用了相同编码的话,就不会用乱码。否则一定乱码。
解决方案:
因为,浏览器的编码未知,服务器的编码未知,所以只能尝试。
String name = request.getParameter("name");//获取浏览器提交的name参数
name = new String(name.getBytes("encode1"), "encode2");
encode1:指的是web服务器的编码,encode2:指浏览器所在操作系统的编码。
1、项目统一采用utf-8编码
2、用javascript对页面中得参数进行编码。(因为不同浏览器编码可能不同)
encodeURI();
3、服务器端,用相同的编码方法进行解码。推荐过滤器,request.setCharacterEncoding("UTF-8");
4、尽量使用post提交。
展开全部
首先,servlet里面要设置的是两个代码
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
然后jsp页面的第一行最后也要是utf-8.
再有就是你的提交方式问题,如果是用post提交的话上述软编码足矣,但是你是doGet也就是用get方式提交.get方式提交是不支持中文的,因此不仅要软编码,还需要硬编码转换.
构造一个方法
public String toString(String old){
return new String(old.getBytes("ISO-8859-1"),"utf-8");
}
也就是把字符串打乱成字节再重组.这样软硬兼施就可以把get方式传值乱码问题解决了.
还有一点就是,凡是提交都推荐用post方法.
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
然后jsp页面的第一行最后也要是utf-8.
再有就是你的提交方式问题,如果是用post提交的话上述软编码足矣,但是你是doGet也就是用get方式提交.get方式提交是不支持中文的,因此不仅要软编码,还需要硬编码转换.
构造一个方法
public String toString(String old){
return new String(old.getBytes("ISO-8859-1"),"utf-8");
}
也就是把字符串打乱成字节再重组.这样软硬兼施就可以把get方式传值乱码问题解决了.
还有一点就是,凡是提交都推荐用post方法.
追问
我用post方式还是出现乱码。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
String name = request.getParameter("name");//获取浏览器提交的name参数
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
url 传递参数是经过ISO-8859-1编码的
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
url 传递参数是经过ISO-8859-1编码的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要post方式提交才行,其他设置都是对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |