使用request.getParameter获取数据中文显示问号

邵江山 2017-03-01 11:15:07
使用页面2获取页面1中的信息时,数字和英文可以正常显示,中文则显示为问号,但是使用页面1直接显示则可以正常显示,请问是何原因?
Tomcat+mysql 所有编码均为GBK
使用网上的这两种方法也没有效果
request.setCharacterEncoding("GBk");
String name2 =request.getParameter("uname");
---------------------------页面1------------------------
<%@page contentType="text/html" pageEncoding="GBK"%>
<%@ page import="java.sql.*"%>
<html>
<head><title>系统</title></head>
<body>
<center>

<hr>
<%! // 定义若干个数据库的连接常量
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
public static final String DBURL = "jdbc:mysql://localhost:3306/sip" ;
public static final String DBUSER = "root" ;
public static final String DBPASS = "admin" ;
%>
<%
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ; // 数据库预处理操作
ResultSet rs = null ; // 查询要处理结果集
boolean flag = false ; // 保存标记
String name = null ; // 保存真实姓名
String employeeid= null;
String TL = null;
String UM = null;
String sip = null;

%>

<%
try{
%>
<%
Class.forName(DBDRIVER) ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
String sql = "SELECT employeeid,name,TL,UM,sip FROM employee WHERE employeeid=?" ;
pstmt = conn.prepareStatement(sql) ;
pstmt.setString(1,request.getParameter("idnum")) ;
rs = pstmt.executeQuery() ; // 查询
if(rs.next()){ // 如果有数据,则可以执行
flag = true ; // 表示登陆成功
employeeid = rs.getString(1) ;
name=rs.getString(2) ;
TL=rs.getString(3) ;
UM=rs.getString(4) ;
sip=rs.getString(5) ;


}
%>

<%
}catch(Exception e) {
e.printStackTrace() ;
}
finally{
try{
rs.close() ;
pstmt.close() ;
conn.close() ;
} catch(Exception e){}
}
%>
<%
if(flag&&sip!=null){ // 已有
%>
<table border="1" width="80%">
<tr>
<td>工号</td>
<td>姓名</td>
<td>TL</td>
<td>UM</td>
<td>分机</td>
</tr>
<tr>
<td><%=employeeid%></td>
<td><%=name%></td>
<td><%=TL%></td>
<td><%=UM%></td>
<td><%=sip%></td>
</tr>
</table>
<jsp:forward page="inquiry_success.jsp">
<jsp:param name="uemployeeid" value="<%=employeeid%>"/>
<jsp:param name="uname" value="<%=name%>"/>
<jsp:param name="uTL" value="<%=TL%>"/>
<jsp:param name="uUM" value="<%=UM%>"/>
<jsp:param name="usip" value="<%=sip%>"/>
</jsp:forward>
<%
} else {if(flag==false){ // 无此人员
%>
<jsp:forward page="notice.htm"/>
<%
}else{
%>
<jsp:forward page="apply.jsp"/>
<%
}}
%>


</center>
</body>
</html>

------------------------------页面2------------------------------------
<%@page contentType="text/html" pageEncoding="gbk"%>
<html>
<head><title>查询成功</title></head>
<body>
<center>
<%request.setCharacterEncoding("GBk");
String name2 =request.getParameter("uname");%>
<table border="1" width="80%">
<tr>
<td>工号</td>
<td>姓名</td>
<td>TL</td>
<td>UM</td>
<td>分机</td>
</tr>
<tr>
<td><%=request.getParameter("uemployeeid")%></td>
<td>查询成功</td>
<td><%=name2%></td>
<td><%=request.getParameter("uTL")%></td>
<td><%=request.getParameter("uUM")%></td>
<td><%=request.getParameter("usip")%></td>
</tr>
</table>

</center>
</body>
</html>
...全文
1071 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
邵江山 2017-03-01
  • 打赏
  • 举报
回复
所有编码都是GBK
Alvis_you 2017-03-01
  • 打赏
  • 举报
回复
你的项目编码是gbk么
qq_36637082 2017-03-01
  • 打赏
  • 举报
回复
说实话,你的代码写的太乱了,在HTML中夹杂这么多程序片,非常不方便程序的调试和运行,建议你要从结构上去调整你的代码,学一下MVC模式。 也正是因为你的代码复用性太差,所以阅读起来也很费力。这里告诉你一个万能的解决乱码的方法:直接对字符串进行转码,转成gbk的。 String name2 =new String(request.getParameter("uname").getBytes("ISO-8859-1")),"gbk");
wengkevin 2017-03-01
  • 打赏
  • 举报
回复
页面一在forward之前 request.setCharacterEncoding("GBK");
快乐先生 2017-03-01
  • 打赏
  • 举报
回复
可能是数据库访问的问题,你把你数据库的访问URL改一下, jdbc:mysql://localhost:3306/sip?useUnicode=true&characterEncoding=gbk
jiajing1990_ 2017-03-01
  • 打赏
  • 举报
回复
你页面的编码和后台不一样吧 你可以看看查完返回之前 后面的数据是不是乱码的
邵江山 2017-03-01
  • 打赏
  • 举报
回复
我知道是编码问题,但是根据网上的方法试了都没解决,不知道问题出在哪?
ryuugu_rena 2017-03-01
  • 打赏
  • 举报
回复
编码问题,乱码了

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧