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
}
展开
 我来答
百度网友489295667
2012-07-02 · TA获得超过2367个赞
知道小有建树答主
回答量:1471
采纳率:80%
帮助的人:304万
展开全部
首先说,你修改那两个文件的编码,没有任何作用。
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提交。
般若兮若
2012-07-02 · TA获得超过2706个赞
知道小有建树答主
回答量:1246
采纳率:0%
帮助的人:940万
展开全部
首先,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方法.
追问
我用post方式还是出现乱码。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
249545538
2012-07-02 · 超过24用户采纳过TA的回答
知道答主
回答量:167
采纳率:0%
帮助的人:81.1万
展开全部
String name = request.getParameter("name");//获取浏览器提交的name参数
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
url 传递参数是经过ISO-8859-1编码的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
撒念文4Y
2012-07-02 · 超过37用户采纳过TA的回答
知道答主
回答量:103
采纳率:0%
帮助的人:97.9万
展开全部
要post方式提交才行,其他设置都是对的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式