当前位置:编程学习 > JAVA >>

新手学习servlet 解决中文乱码

最新学习servlet,遇到了一个普遍很蛋疼的中文乱码问题,我知道这个东西网上很多答案,但是我就是无法解决,所以才上csdn来请教大家.
用的是MYeclipse
                request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();

out.println("<form action='/WebForm/GetFormInfo' method='post'>");
out.println("用户名:<input type='text' name='username'/><br/>");
out.println("密    码:<input type='password' name='pwd'/><br/>");
out.println("<input type='radio' name='sex' value='男'/>男<input type='radio' name='sex' value='女'/>女<br/>");
out.println("<input type='checkbox' name='hobby' value='旅游'/>旅游" +"<input type='checkbox' name='hobby' value='音乐'/>音乐" +"<input type='checkbox' name='hobby' value='运动'/>运动<br/>");
                out.println("<input type='submit' value='提交信息'/>");

out.println("</form>");
接收
               PrintWriter out = response.getWriter();
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
                
                String username=request.getParameter("username");
String pwd=request.getParameter("pwd");
String sex=request.getParameter("sex");
String [] hobby=request.getParameterValues("hobby");
out.println("用户名="+username+"<br/>");
out.println("密    码="+pwd+"<br/>");
out.println("性    别="+sex+"<br/>");
if(hobby!=null){
out.print("你的爱好:");
for(int i=0;i<hobby.length;i++){
out.print(hobby[i]+"  ");
}
}
else{
out.print("你没有选择任何爱好!");
}
}

IE上的结果 

 ???=?????
 ? ?=1234
 ? ?=?
 ????:?? 

开发人员工具
Content-Type text/html;charset=ISO-8859-1 --------------------编程问答-------------------- 还有一个是用eclipse写的

String enc=request.getCharacterEncoding();
String renc=response.getCharacterEncoding();

                request.setCharacterEncoding("utf-8");
response.setHeader("content-type","text/html;charset=UTF-8");

out.println("<form action='/ForJdbc/GetLoginInfo' method='post'>");
out.println("用户名 : <input type='text' name='user'/><br/>");
out.println("密    码: <input type'password' name='pwd'><br/>");
out.println("<input type='submit' value='提交'>");
out.println("</form>");
out.println("请求编码:"+enc);
                out.println("响应编码:"+renc);


IE显示

--------------------编程问答-------------------- 到底怎么会这样呢,使用eclipse在浏览器上打印字符串还是乱码? --------------------编程问答-------------------- 这样写多累。你加个过滤器试试吧 --------------------编程问答-------------------- 你是想在servlet里面写一个页面? --------------------编程问答--------------------
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");


这三句写
response.setContentType("text/html;charset=utf-8");
已经足够了 --------------------编程问答-------------------- 不会是你页面编码没改吧? --------------------编程问答-------------------- 乱码不一定是servlet的问题,有可能是tomcat等部署工具的问题。。
解决javaWEB开发过程中后台接受前台的中文信息乱码的问题  --------------------编程问答-------------------- 在网页中显示的数据不符合html标准,浏览器会根据<meta http-equiv="Content-Type" content="text/html; charset=gbk">来决定数据编码,如果没有这个,浏览器将采用默认的编码。


所以你这个最好输出规范的html,前后分别加上
out.println(
    <html>
       <head>
         <title></title>
         <meta http-equiv="Content-Type" content="text/html; charset=gbk">
         <link href="vote.css" rel="stylesheet" type="text/css">
      </head>
      <body>
);


out.println(
   </body>
   </html>
); --------------------编程问答-------------------- 你看看JSP页面的首部,<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>,这段代码中的pageEncoding的值是否设置为UTF-8 --------------------编程问答--------------------
引用 3 楼 defonds 的回复:
这样写多累。你加个过滤器试试吧
还没学过啊,不管怎么样遇到问题还是要解决的吧 --------------------编程问答--------------------
引用 9 楼 snarlfuture 的回复:
你看看JSP页面的首部,<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>,这段代码中的pageEncoding的值是否设置为UTF-8

我写的不是jsp啊,是servlet --------------------编程问答--------------------
引用 5 楼 zhouren1314 的回复:
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");


这三句写
response.setContentType("text/html;charset=utf-8");
已经足够了
就是不行我猜索性将三句都加上去的啊,可是开发人员工具打出来的还是iso-8859-1 --------------------编程问答--------------------
引用 11 楼 u013231051 的回复:
Quote: 引用 9 楼 snarlfuture 的回复:

你看看JSP页面的首部,<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>,这段代码中的pageEncoding的值是否设置为UTF-8

我写的不是jsp啊,是servlet


但你最后应该是呈现在JSP页面上吧,呈现结果是乱码,是不是? --------------------编程问答-------------------- 你把有关编码的 代码都去掉,先不要写,,无论是响应还是请求,都去掉 --------------------编程问答-------------------- 看一下你数据库用的编码方式也会影响到,我之前就是mysql的编码和项目的编码不一致,就出乱码,而且都是问号 --------------------编程问答-------------------- 写个过滤器吧 --------------------编程问答-------------------- response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//是response !!!!!!在这个前面。。这样就可以了
resp.getWriter(); --------------------编程问答-------------------- 如果楼主还没有解决的话:
(仅供参考,前面的还是需要)
1. 修改eclipse 项目的properties 里面的项目属性,将Text file encoding 改成utf-8
2. 将自己写的servlet.java文件,在记事本中打开,选择另存为文件,并保存为utf-8的格式. --------------------编程问答-------------------- 是不是你用浏览器查看用的不是utf-8? --------------------编程问答-------------------- 应该是要转码吧 --------------------编程问答-------------------- 楼主:
   1,首先检查你的jsp页面的传输编码格式是否是utf-8  默认的是ISO-8859-1
   2, 可以在你的tomcat中设置编码格式位置如下 tomcat/conf/server.xml中的67行
<Connector port="7080" protocol="HTTP/1.1" 
     maxThreads="600"
     minSpareThreads="100"
     maxSpareThreads="500"
     acceptCount="700"
     connectionTimeout="20000" 
     redirectPort="7443" URIEncoding="UTF-8" />
   3,写一个filter过滤器 --------------------编程问答-------------------- 在servlet写request.setCharacterEncoding("utf-8");
在jsp也写<%request.setCharacterEncoding("utf-8");%>
jsp的最上面也要改成utf-8
工程文件也改。。
再不行看看tomcat 的server.xml里面是不是也改成utf-8

一般前三个就解决了 --------------------编程问答--------------------
引用 19 楼 Ccheung 的回复:
是不是你用浏览器查看用的不是utf-8?
调了utf-8但是响应头又是显示iso
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,