jsp、jquery的ajax乱码问题

本文详细介绍了在Web开发中如何解决中文乱码问题,包括JSP页面编码设置、GET和POST请求处理方法及jQuery Ajax请求中的乱码解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、页面的编码

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>--这是jsp页面存储的编码 中文不能用iso-8859-1进行存储。

<%@page contentType="text/html; charset=utf-8" %>--这是发送请求之后返回页面的编码对于的是  response.setContentType("text/html;charset=utf-8");

一般来说将jsp存储页面、相应页面都设置为UTF-8这样出现中文乱码的机会较少。

2、Form 提交表单时的乱码

2.1 get 方式

DemoGet1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>

<form action="./DemoGet2.jsp" method="get" enctype="application/x-www-form-urlencoded" > 
<input type=hidden name=act value=动作 /> 
<input type=submit value=ok> 
</form>

DemoGet2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

String tempVal = request.getParameter("act");

out.println(new String(tempVal.getBytes("ISO-8859-1"), "Utf-8"));

利用URL进行jsp页面传值如同Form的Get 方法,因此处理的方式和From 的表单Get 一样。

一般来说我们很少直接在URL里面把参数写成中文,如例子中的"type=苹果"这样传递。如果出现这种情况,在我们的接收参数的页面我们只需要做个简单的转换就可以了。

传递链接:<a href='./MyJsp2.jsp?act=<%=URLEncoder.encode("中国人 非常好 =-")%>'>test</a>

接受参数:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%@ page import="java.net.*" %>

String tempVal = URLDecoder.decode(request.getParameter("act")); 
out.println(new String(tempVal.getBytes("ISO-8859-1"), "gb2312"));

2.2 post 方式

DemoPost1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>

<form action="./DemoPost2" method="post" enctype="application/x-www-form-urlencoded" > 
<input type=hidden name=act value=动作 /> 
<input type=submit value=ok> 
</form>

接受有两种方式:

第一种如同DemoGet2.jsp

第二种如下:

<%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>

<%@page contentType="text/html; charset=utf-8" %>

<%  request.setCharacterEncoding("utf-8");

String tempVal = request.getParameter("act");

%>

此时<%@page contentType="text/html; charset=utf-8" %>如果charset设为ISO-8859-1 则同样会出现乱码。因为这是相应的页面,ISO-8859-1不支持中文。

为什么第二种情况只对post方法有用:

pageEncoding这个只对post起作用。get方法提交时,大家可以从地址栏里看到提交的参数,这是因为get方法传递是作为报文头提交的,而pageEncoding对报文头是没有作用的,所以仍然按照 iso8859-1编码,才出现了刚才的乱码问题。而post提交的是form表单的内容,pageEncoding指定了它的编码,所以他会按照指定编码传递。 

reference:http://www.cnblogs.com/xuqiang/archive/2010/09/26/1953495.html

3、jquery 的Ajax 中文乱码

传递时进行两次encodeURI 编码

$.get('http://localhost:8080/jqueryjs/UserVerify?userName='+encodeURI(encodeURI(_value)),function(data){
  $("#ajaxDemo").html(data);
});

 

接受进行一次编码

 String param = request.getParameter("userName");

String userName = java.net.URLDecoder.decode(param, "Utf-8");

就ok了

 

转载于:https://www.cnblogs.com/duanduanlong/archive/2012/08/10/2631558.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值