AJAX POST提交中文乱码解决(jsp)

2016-02-19 20:36 6 1 收藏

get新技能是需要付出行动的,即使看得再多也还是要动手试一试。今天图老师小编跟大家分享的是AJAX POST提交中文乱码解决(jsp),一起来学习了解下吧!

【 tulaoshi.com - Web开发 】

今天终于解决了AJAX的中文乱码问题,写篇文章来帮助一下有同样问题的朋友们。我的开发环境:XP, eclipse,使用GB18030编码。

当遇到这个问题时,到网上去查了好多文章,提到几种解决方案,如:全站UTF-8编码;请求头编码为中文;使用javascript中的escape函数。

使用GET方式提交数据的时候,中文问题很好解决,setrequestheader("Content-Type","text/html; encoding=gb18030")就可以了。但这个方法在POST方式中却不起作用。大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

但对于POST方式,使用上述的几种方法经过多次测试,问题依旧。我郁闷了好几天。

今天把问题解决了,很简单,是使用escape(或encodeURI,两个函数javascript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这是解决问题的关键。

我的例子涉及两个页面,一个是初始页面,一个是AJAX请求处理页面。

初始页面内容如下(hello.jsp):

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

%@ page language="java" import="java.util.*" pageEncoding="GB18030"%
%String path = request.getContextPath();%
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
html
  head
    titleAJAX提交页面/title
 meta http-equiv="Content-Type" content="text/html; charset=GB18030"
   script type="text/javascript"
    function justdo(){
  var post="name=王力猛&email=wallimn@sohu.com&bokee=http://wallimn.bokee.com";
  post = encodeURI(post);
  post = encodeURI(post);//两次,很关键
  var xmlObj = new ActiveXObject('Msxml2.XMLHTTP');
  var URL = '%= path%/page/act.jsp';//文件名需要调整成测试时的相应位置?
  xmlObj.open ('post',URL,true);
  xmlObj.setrequestheader("cache-control","no-cache");
  xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded");
  xmlObj.send (post);//注意:POST方式,使用这个来发送内容?
   }
   /script
  /head 
  body
  input type="button" value="提交" onclick="justdo()"/
   /body
/html
/////////////////////////////////////////////////////////////////////////////////////
  ajax请求处理页面(act.jsp)的内容如下:
/////////////////////////////////////////////////////////////////////////////////////

%@ page language="java" import="java.util.*" pageEncoding="GB18030"%
%String path = request.getContextPath();%
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
%@page import="java.net.URLDecoder"%
html
  head
    titleajax deal/title
 meta http-equiv="pragma" content="no-cache"
 meta http-equiv="cache-control" content="no-cache"
 meta http-equiv="expires" content="0"   
  /head
  body
  %
  //遍历输出参数内容。
  for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
   String h = (String) e.nextElement();
   String v = request.getParameter(h);
   String mm =  java.net.URLDecoder.decode(v, "UTF-8");
   System.out.println("请求参数: " + h + " = " + mm);
  }
   %
  /body
/html
/////////////////////////////////////////////////////////////////////////////////////
分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数java.net.URLDecoder.decode()就可解出原始的正确的信息。

以上分析纯属个人看法,不知是否正确。

来源:http://www.tulaoshi.com/n/20160219/1624110.html

延伸阅读
标签: Web开发
AJAX传递中文字符串时必须把中文字符串编码成unicode,一般会用到JS的自带函数escape().不过找到了更好的函数来确决中文字符转换成unicode编码的函数 function uniencode(text)   {       text = escape(text.toString()).replace(/\+/g, "%2B");       var matches = ...
标签: Web开发
AJAX的乱码的出现在的原因 由于XMLHTTP采用的是Unicode编码上传数据,而一般页面采用的是gb2312,这就造成显示页面时产生乱码。而当在获取页面时的XMLHttp返回的是utf-8编码,这就造成了显示产生乱码。 解决方法之一就是在PHP文件中显示声明为GB2312 header("Content-Type:text/html;charset=GB2312");  而对于发送到服务器的中文进行...
标签: Web开发
因AJAX接受数据时服务器默认是采用UTF-8的编码形式进行传送,所以在很多GB2312中文网页中应用AJAX回传数据经常会发生中文乱码。 解决AJAX中文回传乱码,其实就是将在服务器端文件加一个HEADER,指明送出的是什么编码流。比如 ASP文档就是在头部增加一行说明: Response.Charset("GB2312") PHP的示例如下: ...
标签: Web开发
最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助。 众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找到符合自己理想的答案,我今天就是在网...
标签: Java JAVA基础
  最近在网上看到一个用java来操纵excel的open source,在weblogic上试用了一下,觉得很不错,特此向大家推荐一下。 首先去http://www.andykhan.com/jexcelapi/index.html下载最新的JExcelApi,把jxl.jar置于你的classpath中。 写一个javaBean,利用JExcelApi来动态生成excel文档,我这里写一个最简单的,示意性的。复杂的你可...

经验教程

730

收藏

22
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部