先贴源码
jsp部分:
<%@ page language="java" pageEncoding="gb2312"%>
<%@ page contentType="text/html;charset=gb2312"%>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<script language="javascript" src="js/jquery-1.3.2.js"></script>
<script type="text/javascript">
function getcnames(){
var cnames = "";
$.ajax(
{
type: "Post",
url: "servlet/GetSiteCnameServlet",
async : false,
success: function(msg)
{
cnames = msg;
alert(msg);
}
});
document.getElementById( "filecnames" ).innerHTML = cnames;
}
</script>
</head>
<body>
<table width="800">
<h3>站点管理</h3>
<hr>
<input type="button" value="读取文件名" onclick="getcnames()">
<div id="filecnames"></div></table>
/////////////////////////////////////////////////////////////////////form这部分是做测试用的,测试证明“西点男孩”可以返回页面无乱码<form action="servlet/GetSiteCnameServlet">
<input type="text" name="xidianboy" value="西点男孩">
<input type="submit" value="提交">
</form>
/////////////////////////////////////////////////////////////////////
</body>
</html>servlet部分:
public class GetSiteCnameServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { PrintWriter out = response.getWriter();
GetCnames rcname = new GetCnames();
String cnames = rcname.getCnames();
out.println(cnames);
out.println(request.getParameter("xidianboy"));
} public GetSiteCnameServlet() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); } public void init() throws ServletException {
// Put your code here
}}
说明:
点击 "读取文件名" 按钮进入doPost方法,String cnames = rcname.getCnames(); cnames返回的是中文字符,无误!,但页面 alert(msg);的时候就显示问号,一个汉字显示一个问号(“???,????,?????,??,????,”),试过了很多字符编码的解决办法都没用。后来测试不用Ajax回调直接输出,直接:
<form action="servlet/GetSiteCnameServlet">
<input type="text" name="xidianboy" value="西点男孩">
<input type="submit" value="提交">
</form>
则能够返回“西点男孩”中文,无误!百思不得其解,往高手指点。
Ajax回调回来的乱码该如何解决?
jsp部分:
<%@ page language="java" pageEncoding="gb2312"%>
<%@ page contentType="text/html;charset=gb2312"%>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<script language="javascript" src="js/jquery-1.3.2.js"></script>
<script type="text/javascript">
function getcnames(){
var cnames = "";
$.ajax(
{
type: "Post",
url: "servlet/GetSiteCnameServlet",
async : false,
success: function(msg)
{
cnames = msg;
alert(msg);
}
});
document.getElementById( "filecnames" ).innerHTML = cnames;
}
</script>
</head>
<body>
<table width="800">
<h3>站点管理</h3>
<hr>
<input type="button" value="读取文件名" onclick="getcnames()">
<div id="filecnames"></div></table>
/////////////////////////////////////////////////////////////////////form这部分是做测试用的,测试证明“西点男孩”可以返回页面无乱码<form action="servlet/GetSiteCnameServlet">
<input type="text" name="xidianboy" value="西点男孩">
<input type="submit" value="提交">
</form>
/////////////////////////////////////////////////////////////////////
</body>
</html>servlet部分:
public class GetSiteCnameServlet extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { PrintWriter out = response.getWriter();
GetCnames rcname = new GetCnames();
String cnames = rcname.getCnames();
out.println(cnames);
out.println(request.getParameter("xidianboy"));
} public GetSiteCnameServlet() {
super();
} public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response); } public void init() throws ServletException {
// Put your code here
}}
说明:
点击 "读取文件名" 按钮进入doPost方法,String cnames = rcname.getCnames(); cnames返回的是中文字符,无误!,但页面 alert(msg);的时候就显示问号,一个汉字显示一个问号(“???,????,?????,??,????,”),试过了很多字符编码的解决办法都没用。后来测试不用Ajax回调直接输出,直接:
<form action="servlet/GetSiteCnameServlet">
<input type="text" name="xidianboy" value="西点男孩">
<input type="submit" value="提交">
</form>
则能够返回“西点男孩”中文,无误!百思不得其解,往高手指点。
Ajax回调回来的乱码该如何解决?
解决方案 »
- 小弟正在做java开发,连接数据库时这段程序报错,不知道怎么解决,求高人指点,十分感谢
- lucene的小问题
- jsp连数据库遇到的问题,请高手帮忙
- 做一个简单的新闻网站,新闻的内容是放在数据库里面吗?
- servlet返回图片文件的问题
- c# gzipstream压缩、java解压的问题
- 在jsp的java代码中如何得到错误提示: 并且system.out.print 可以显示吗
- Incorrect string value: '\xF0\x9F\x90\x82'
- TOMCAT自带的演示程序无法通过编译!请高手解答!(在线求救)
- BUG!!用jspSmartUpload上传文件出现的怪事!!!
- vsts项目的讨论
- 谁有好的SSH的分法
String cnames = rcname.getCnames();
new String(cnames.getBytes( "ISO-8859-1"), "GBK");
out.println(cnames);这里cnames是中文,没有问题,请教sbe_steels 回调回来的“msg” 如何解码?
下面加上
<%@ page contentType="text/html;charset=gb2312" %>
一定有, 而且要在文件首行(不能在include文件中) 。不行的话,把第一行<%@ page language="java" pageEncoding="gb2312"%> 去掉再试
// 设定为2312编码
resp.setContentType("text/html;charset=gb2312");
<form action="servlet/GetSiteCnameServlet">
<input type="text" name="xidianboy" value="西点男孩">
<input type="submit" value="提交">
</form> out.println(request.getParameter("xidianboy")); 这样输出中文是没有问题的,所以可以肯定我的jsp的字符编码没有问题,那么问题在:
$.ajax(
{
type: "Post",
url: "servlet/GetSiteCnameServlet",
async : false,
success: function(msg)
{
cnames = msg;
alert(msg);
}
});
属于jquery字符编码问题,我找了资料:
$.ajax({url: "3.jsp",type: "post",data: "method=testAjaxPost&name=中文",success: function(response){
alert(response);
}});
诸如此类修改,还是没效果。