JSP表单乱码问题 我用的myeclipes+tomcat5.5+oracle在做JAVA WEB现在遇到一个很郁闷的问题 我把所有的编码格式(包括JSP文件 JAVA文件 TOMCAT里面的配置文件 过滤器)全部改成了“UTF-8”的格式但是我在通过表单编辑提交以后 仍然无法得到中文 全部是"?????"我是用的servlet在接受表单传递的值 在我servlet里面得到的就已经是?????了 请问这个是什么原因 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 少用url后跟中文参数,如果跟的话,需要在tomcat的server.xml里面设置uriencodeing=“utf-8”看一下你的jsp页面的编码格式是否为utf-8,如果不是,改成utf-8 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); }这个是我的过滤器 你们所说的编码格式我都改了的 还是无法正常显示中文 过滤器里设置编码不应该是GBKkcg? 为什么会是UTF-8呢? 过滤器里设置编码不应该是GBK? 为什么会是UTF-8呢? 我记得解决中文乱码问题应该设置成GBK吧。 请确定你是用的POST提交,你这种过滤器只能针对POST提交 确定表单的method=“post” 我也设置过 GBK 还是无法解决 所以我很迷惑而且我记得UTF-8是能自动识别中文的 帖点代码吧jsp,servlet的.只是描述,看不出问题地. 这个是servlet的public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); int id = ToolKit.object2Int(request.getParameter("id")); String name = ToolKit.object2String(request.getParameter("name")); String psw = ToolKit.object2String(request.getParameter("psw")); String year = ToolKit.object2String(request.getParameter("Year")); String month = ToolKit.object2String(request.getParameter("Month")); String day = ToolKit.object2String(request.getParameter("Day")); String birthday=year+"-"+month+"-"+day; String education = ToolKit.object2String(request.getParameter("education")); String eduinformation = ToolKit.object2String(request.getParameter("eduInformation")); String workexp = ToolKit.object2String(request.getParameter("workExp")); //workexp=new String(workexp.getBytes("ISO-8859-1"),"gbk"); String type = ToolKit.object2String(request.getParameter("type")); UserDAO userDAO = new UserDAO(); User user = new User(id, name, psw, birthday, education, eduinformation,workexp); if (type.equals("save")) {//add String psw1=ToolKit.object2String(request.getParameter("psw1")); User Account=new User(ToolKit.randomID(),name,psw1,birthday,education,eduinformation,workexp); userDAO.save(Account); request.setAttribute("tip", "add success!"); request.getRequestDispatcher("/user/list.jsp").forward(request, response); } if (type.equals("update")) {//edit System.out.println(eduinformation+"***"+new String(workexp.getBytes("UTF-8"),"GBK")); userDAO.update(user); request.setAttribute("tip", "edit success!"); request.getRequestDispatcher("/user/list.jsp").forward(request, response); } if (type.equals("del")) {//del userDAO.del(user); request.setAttribute("tip", "del success!"); request.getRequestDispatcher("/user/list.jsp").forward(request, response); } if (type.equals("relog")) { request.getSession().invalidate(); request.setAttribute("tip", "ע��ɹ�!"); request.getRequestDispatcher("/index.jsp").forward(request, response); } } 过滤器的 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); } JSP编辑页面的<%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%><%@page import="com.tb.hr.util.ToolKit"%><%@page import="com.tb.hr.user.dao.UserDAO"%><%@page import="com.tb.hr.user.bean.User"%> <body><fieldset> <legend> 编辑 </legend> <form action="UserProcess" method="POST"> <input type="hidden" value="update" name="type" /> ID: <input type="text" name="id" value="<%=user.getId()%>" size="20" /> <br> Name: <input type="text" name="name" value="<%=user.getName()%>" size="20" /> <br> Psw: <input type="password" name="psw" value="<%=user.getPsw()%>" size="21" /> <br> Birthday: <SELECT NAME="Year" SIZE="1" > <OPTION VALUE="<%= birthday[0]%>" SELECTED><%= birthday[0]%></OPTION> <% for(int i=1970;i<2004;i++){ %> <OPTION VALUE="<%= i %>"><%=i %> <% }%> </SELECT> 年 <SELECT NAME="Month" SIZE="1"> <OPTION VALUE="<%= birthday[1]%>" SELECTED><%= birthday[1]%> <OPTION VALUE="1">01 <OPTION VALUE="2">02 <OPTION VALUE="3">03 <OPTION VALUE="4">04 <OPTION VALUE="5">05 <OPTION VALUE="6">06 <OPTION VALUE="7">07 <OPTION VALUE="8">08 <OPTION VALUE="9">09 <OPTION VALUE="10">10 <OPTION VALUE="11">11 <OPTION VALUE="12">12 </SELECT> 月 <SELECT NAME="Day" SIZE="1"> <OPTION VALUE="<%= birthday[2]%>" SELECTED><%= birthday[2]%> <OPTION VALUE="1">01 <OPTION VALUE="2">02 <OPTION VALUE="3">03 <OPTION VALUE="4">04 <OPTION VALUE="5">05 <OPTION VALUE="6">06 <OPTION VALUE="7">07 <OPTION VALUE="8">08 <OPTION VALUE="9">09 <OPTION VALUE="10">10 <OPTION VALUE="11">11 <OPTION VALUE="12">12 <OPTION VALUE="13">13 <OPTION VALUE="14">14 <OPTION VALUE="15">15 <OPTION VALUE="16">16 <OPTION VALUE="17">17 <OPTION VALUE="18">18 <OPTION VALUE="19">19 <OPTION VALUE="20">20 <OPTION VALUE="21">21 <OPTION VALUE="22">22 <OPTION VALUE="23">23 <OPTION VALUE="24">24 <OPTION VALUE="25">25 <OPTION VALUE="26">26 <OPTION VALUE="27">27 <OPTION VALUE="28">28 <OPTION VALUE="29">29 <OPTION VALUE="30">30 <OPTION VALUE="31">31 </SELECT> 日 <br> Education: <input type="text" name="education" value="<%=user.getEducation() %>"/> <br> EduInformation:<br> <textarea rows="5" cols="80" name="eduInformation"><%=user.getEduInformation() %></textarea> <br> WorkExp:<br> <textarea rows="5" cols="80" name="workExp"><%=user.getWorkExp() %></textarea> <br><br> <input type="submit" value="提交" /> </form> </fieldset></body> 建议楼主看看这个帖子: http://topic.csdn.net/u/20090811/19/e7d6b4ea-6db4-4bd9-9417-28c528fa9cfb.html 过滤器这样配置试试 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //设置请求时的编码规范request.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); //设置响应时的编码规范response.setContentType("text/html;charset=UTF-8"); } 我测试了,没有问题.String name = ToolKit.object2String(request.getParameter("name")); 不知道你这个ToolKit是做什么用的.我直接使用String name = request.getParameter("name");//本身就是个String,还转什么...System.out.println("名称:"+name);没有任何问题.你要确定一下,你的过滤器是不是起作用了.在过滤器里打印点什么.我的测试代码:servlet:public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); String name = request.getParameter("name"); System.out.println("名称"+name); //System.out.println(new String(name.getBytes("ISO8859-1"),"UTF-8")); //不使用过滤器可以直接用这条语句. }filter:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("过滤");//测试过滤器是否起作用. request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); chain.doFilter(request, response); }jsp:<%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><body><form action="UserProcess" method="POST"> Name: <input type="text" name="name" value="" size="20" /> <input type="submit" value="提交" /> </form><br> </body></html>web.xml<servlet> <description></description> <display-name>UserProcess</display-name> <servlet-name>UserProcess</servlet-name> <servlet-class>test.UserProcess</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserProcess</servlet-name> <url-pattern>/UserProcess</url-pattern> </servlet-mapping> <filter> <filter-name>EncodeFilter</filter-name> <filter-class>test.EncodeFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodeFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>servlet和filter在test包下. 3中办法处理你这样的问题,第一种是过滤器1 :办法public class EncodingFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { req.setCharacterEncoding("GBK"); chain.doFilter(req, resp); } public void init(FilterConfig arg0) throws ServletException { }}2:办法 request.setCharacterEncoding("GBK");3:办法 String xxx = new String(xxx.getBytes("ISO8859-1"))最后一种使用比较少,就是在tomcat 服务器中配置.如果使用的是mysql数据库,也应该都设置成一样的编码! [Quote=引用 18 楼 norwolfli 的回复:]我测试了,没有问题.String name = ToolKit.object2String(request.getParameter("name"));不知道你这个ToolKit是做什么用的.我直接使用String name = request.getParameter("name");//本身就是个String,还转什么...System.out.println("名称:"+name);没有任何问题.ToolKit.object2String 是一个防止空指针异常的方法 public static final String object2String(Object o) { return o == null ? "" : o.toString(); }不过问题我中文乱码的问题还是算解决了 我的过滤器是这样的写的 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); response.setContentType("text/html;charset=UTF-8"); }这当中的语句 1 2 4少任意一个都会出现乱码 文件上传如何设置路径 求通用分页标签 Eclipse“找不到源”的报错 弱弱问题麻烦了 SQL2000关闭数据库在那里关。。。 数据库 新人,初学,烦闷,发泄,散分... Tomcat4.0中运行的程序在Tomcat5.5中处处出错,而且中文无法显示,烦。 怎么把excel导出的数据导入mysql,急急急。。 (很简单,在线等)怎么总配置不好javabeans文件? struts2控制List<String>换行输出 sttuts2 页面效果问题 Hibernate session相关的问题;先delete后save OR update出的异常,50分
看一下你的jsp页面的编码格式是否为utf-8,如果不是,改成utf-8
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
}
这个是我的过滤器 你们所说的编码格式我都改了的 还是无法正常显示中文
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
int id = ToolKit.object2Int(request.getParameter("id"));
String name = ToolKit.object2String(request.getParameter("name"));
String psw = ToolKit.object2String(request.getParameter("psw"));
String year = ToolKit.object2String(request.getParameter("Year"));
String month = ToolKit.object2String(request.getParameter("Month"));
String day = ToolKit.object2String(request.getParameter("Day"));
String birthday=year+"-"+month+"-"+day;
String education = ToolKit.object2String(request.getParameter("education"));
String eduinformation = ToolKit.object2String(request.getParameter("eduInformation"));
String workexp = ToolKit.object2String(request.getParameter("workExp"));
//workexp=new String(workexp.getBytes("ISO-8859-1"),"gbk");
String type = ToolKit.object2String(request.getParameter("type"));
UserDAO userDAO = new UserDAO();
User user = new User(id, name, psw, birthday, education, eduinformation,workexp); if (type.equals("save")) {//add
String psw1=ToolKit.object2String(request.getParameter("psw1"));
User Account=new User(ToolKit.randomID(),name,psw1,birthday,education,eduinformation,workexp);
userDAO.save(Account);
request.setAttribute("tip", "add success!");
request.getRequestDispatcher("/user/list.jsp").forward(request, response);
} if (type.equals("update")) {//edit
System.out.println(eduinformation+"***"+new String(workexp.getBytes("UTF-8"),"GBK"));
userDAO.update(user);
request.setAttribute("tip", "edit success!");
request.getRequestDispatcher("/user/list.jsp").forward(request, response);
} if (type.equals("del")) {//del
userDAO.del(user);
request.setAttribute("tip", "del success!");
request.getRequestDispatcher("/user/list.jsp").forward(request, response);
} if (type.equals("relog")) {
request.getSession().invalidate();
request.setAttribute("tip", "ע��ɹ�!");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
}
<%@page import="com.tb.hr.util.ToolKit"%>
<%@page import="com.tb.hr.user.dao.UserDAO"%>
<%@page import="com.tb.hr.user.bean.User"%>
<body>
<fieldset>
<legend>
编辑
</legend>
<form action="UserProcess" method="POST">
<input type="hidden" value="update" name="type" />
ID:
<input type="text" name="id" value="<%=user.getId()%>" size="20" />
<br>
Name:
<input type="text" name="name" value="<%=user.getName()%>" size="20" />
<br>
Psw:
<input type="password" name="psw" value="<%=user.getPsw()%>" size="21" />
<br>
Birthday:
<SELECT NAME="Year" SIZE="1" >
<OPTION VALUE="<%= birthday[0]%>" SELECTED><%= birthday[0]%></OPTION>
<% for(int i=1970;i<2004;i++){
%>
<OPTION VALUE="<%= i %>"><%=i %>
<% }%>
</SELECT> 年
<SELECT NAME="Month" SIZE="1">
<OPTION VALUE="<%= birthday[1]%>" SELECTED><%= birthday[1]%>
<OPTION VALUE="1">01
<OPTION VALUE="2">02
<OPTION VALUE="3">03
<OPTION VALUE="4">04
<OPTION VALUE="5">05
<OPTION VALUE="6">06
<OPTION VALUE="7">07
<OPTION VALUE="8">08
<OPTION VALUE="9">09
<OPTION VALUE="10">10
<OPTION VALUE="11">11
<OPTION VALUE="12">12
</SELECT> 月
<SELECT NAME="Day" SIZE="1">
<OPTION VALUE="<%= birthday[2]%>" SELECTED><%= birthday[2]%>
<OPTION VALUE="1">01
<OPTION VALUE="2">02
<OPTION VALUE="3">03
<OPTION VALUE="4">04
<OPTION VALUE="5">05
<OPTION VALUE="6">06
<OPTION VALUE="7">07
<OPTION VALUE="8">08
<OPTION VALUE="9">09
<OPTION VALUE="10">10
<OPTION VALUE="11">11
<OPTION VALUE="12">12
<OPTION VALUE="13">13
<OPTION VALUE="14">14
<OPTION VALUE="15">15
<OPTION VALUE="16">16
<OPTION VALUE="17">17
<OPTION VALUE="18">18
<OPTION VALUE="19">19
<OPTION VALUE="20">20
<OPTION VALUE="21">21
<OPTION VALUE="22">22
<OPTION VALUE="23">23
<OPTION VALUE="24">24
<OPTION VALUE="25">25
<OPTION VALUE="26">26
<OPTION VALUE="27">27
<OPTION VALUE="28">28
<OPTION VALUE="29">29
<OPTION VALUE="30">30
<OPTION VALUE="31">31
</SELECT> 日
<br>
Education:
<input type="text" name="education" value="<%=user.getEducation() %>"/>
<br>
EduInformation:<br>
<textarea rows="5" cols="80" name="eduInformation"><%=user.getEduInformation() %></textarea>
<br>
WorkExp:<br>
<textarea rows="5" cols="80" name="workExp"><%=user.getWorkExp() %></textarea>
<br><br>
<input type="submit" value="提交" />
</form>
</fieldset>
</body>
http://topic.csdn.net/u/20090811/19/e7d6b4ea-6db4-4bd9-9417-28c528fa9cfb.html
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//设置请求时的编码规范
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
//设置响应时的编码规范
response.setContentType("text/html;charset=UTF-8");
}
我直接使用
String name = request.getParameter("name");//本身就是个String,还转什么...
System.out.println("名称:"+name);
没有任何问题.你要确定一下,你的过滤器是不是起作用了.在过滤器里打印点什么.我的测试代码:servlet:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
String name = request.getParameter("name");
System.out.println("名称"+name);
//System.out.println(new String(name.getBytes("ISO8859-1"),"UTF-8"));
//不使用过滤器可以直接用这条语句.
}filter:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
System.out.println("过滤");//测试过滤器是否起作用.
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response); }jsp:
<%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<form action="UserProcess" method="POST">
Name:
<input type="text" name="name" value="" size="20" />
<input type="submit" value="提交" />
</form>
<br>
</body>
</html>web.xml
<servlet>
<description></description>
<display-name>UserProcess</display-name>
<servlet-name>UserProcess</servlet-name>
<servlet-class>test.UserProcess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UserProcess</servlet-name>
<url-pattern>/UserProcess</url-pattern>
</servlet-mapping>
<filter>
<filter-name>EncodeFilter</filter-name>
<filter-class>test.EncodeFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodeFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>servlet和filter在test包下.
1 :办法
public class EncodingFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
req.setCharacterEncoding("GBK");
chain.doFilter(req, resp);
}
public void init(FilterConfig arg0) throws ServletException {
}
}
2:办法 request.setCharacterEncoding("GBK");
3:办法 String xxx = new String(xxx.getBytes("ISO8859-1"))
最后一种使用比较少,就是在tomcat 服务器中配置.如果使用的是mysql数据库,也应该都设置成一样的编码!
我测试了,没有问题.String name = ToolKit.object2String(request.getParameter("name"));不知道你这个ToolKit是做什么用的.
我直接使用
String name = request.getParameter("name");//本身就是个String,还转什么...
System.out.println("名称:"+name);
没有任何问题.ToolKit.object2String 是一个防止空指针异常的方法
public static final String object2String(Object o) {
return o == null ? "" : o.toString();
}
不过问题我中文乱码的问题还是算解决了 我的过滤器是这样的写的
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
response.setContentType("text/html;charset=UTF-8");
}这当中的语句 1 2 4少任意一个都会出现乱码