`

ajax乱码

    博客分类:
  • web
阅读更多

ajax乱码解决总结
第一,javascript沿用java的字符处理方式,内部是使用unicode来处理所有字符的,
第二,utf-8是每个汉字(unicode字符)用3个字节来存储。
第三,用utf-8来send数据是不会出现乱码的,是后台程序没有正确解码才会出现乱码。
第四,ajax发送数据的时候如果修改 Content-Type 为 application/x-www-form-urlencoded",肯定是用post方式,而“太大的数据往往会出错”是用GET方式发送数据造成的。
第五,用vbscript写的函数是用来把数据转成gbk编码(操作系统默认的编码方式。如果在繁体系统上就是big5之类的编码)的,而不是gb2312,两者的编码字符数量相差3倍左右。
第六,用cookie来发送数据,一是很容易溢出,二是要不停的擦屁股,否则cookie里面的数据在每个http请求(包括图片和脚本请求)中都会被发送。三是并发几个http请求的时候,没有办法指定那个cookie是要发送给那个http请求的。
------------------------
用AJAX 来GET回一个页面时,RESPONSETEXT里面的中文多半会出现乱码,这是因为xmlhttp在处理返回的responseText的时候,是把 resposeBody按UTF-8编码进解码考形成的,如果服务器送出的确实是UTF-8的数据流的时候汉字会正确显示,而送出了GBK编码流的时候就 乱了。解决的办法就是在送出的流里面加一个HEADER,指明送出的是什么编码流,这样XMLHTTP就不会乱搞了。

PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");

 

方法一  (这种方法不怎么可靠)
向服务器发送请求,在服务器端加入:  
    String   string   =   request.getParmater("parmater");  
          string   =   new   String(string.getBytes("ISO8859-1"),"GBK");  
服务器向客户端发送报文:  
          String   static   CONTENT_TYPE   =   "text/html;charset=GBK";  
    response.SetContentType(CONTENT_TYPE);
 方法二 (不推荐使用,URLDecoder.decode()与新浏览器不兼容)
Ajax POST 中文乱码解决
看了好多篇文章,最终还是看到一篇,解决了自己的问题.

ajaxpost.js

var myRequest; // Variable to hold request object
function mysubmit()...{
if (window.XMLHttpRequest)
...{
    myRequest = new XMLHttpRequest(); // Standards-compliant browsers
} else if (window.ActiveXObject)
...{
    myRequest = new ActiveXObject("Msxml2.XMLHTTP"); // For IE
}

var post="name="+document.getElementById("postval").value;
post=encodeURI(post);
post=encodeURI(post); //最重要的部分,两次调用encodeURI ,就是编码两次
myRequest.open("POST","servlet/Display",false);
//myRequest.setRequestHeader("contentLength",post.length);
myRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
myRequest.send(post);
var res=myRequest.responseText;//接收返回的数据
document.getElementById("display").innerHTML=res;
}

servlet


public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException ...{

  response.setContentType("text/html");
  response.setCharacterEncoding("GBK");
  PrintWriter out = response.getWriter();
  String name=request.getParameter("name");
  name=URLDecoder.decode(name,"utf8"); //post 传递的时候,一定是用utf8编码的,url 自己可以设定
  System.out.println(name);
  out.println(name);
  out.flush();
  out.close();
}

分析:当调用request.getParameter()函数时,会自动进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI 编码两次后,request.getParameter()函数得到的是原信息URI编码一次的内容。再用可控的解码函数 java.net.URLDecoder.decode()就可解出原始的正确的信息。

 方法三(还可以)

AJAX提交数据乱码,返回数据乱码的解决方案
      随着AJAX的流行,乱码问题也开始困扰着许多刚开始使用它的程序员,幸好我之前对JSP乱码有过一点研究,在遇到AJAX后,并没有给我带来多大的困扰,在此将我的一些心得共享给大家。
      万变不离其宗,AJAX的乱码问题自然跟编码有关了,其实很多人跟我一样想到了对文件编码进行设置,并且在接数据时设置了requet的编码,在返回的数据时设置了response的编码一切都以为会很顺利,可是这一切都是徒劳无功的,讨厌的乱码再一次出现在你眼前。在你试了N多种方法,包括JS自身的escape,unescape方法后,你发现乱码仍然猖狂地出现在屏幕上。
     其实在试过这N多方法后,很多人都没发现,解决的方法其实很简单,而且其答案就在我们之前处理的JSP乱码之中。让我们先看一下AJAX的经典请求代码

最后别忘了在返回数据时也设置上:


xmlhttp.open( "post", url, async );
xmlhttp.setRequestHeader( "Content-Type", "text/html" );
xmlhttp.send( params );

通过前面的说明,不知道你现在看出端倪了没有。不知道是受了网上教程的影响还是其它方面影响,setRequestHeader并是万年不变的,也没人想过去改它,而问题就正好出在这个地方。回想一个JSP页面内容的编码设置,其中有这么一节:

contentType="text/html; charset=UTF-8"

现在知道问题了吧,所以我们要把第二句代码改为:

xmlhttp.setRequestHeader( "Content-Type", "text/html;charset=UTF-8" );response.setContentType( "text/xml" );
response.setCharacterEncoding( "UTF-8" );

是不是很简单,一点都不麻烦呢?
如果要问为什么的话,其实我们可以把xmlhttp看成是一个临时页面,它由浏览器动态生成,主要作用是在后台获得请求的数据(可以看成是一个高级的iframe)。所以对于普通页面设置的编码,对它也要同样设置。而在servlet中返回数据为什么要设置contentType和encoding其道理也是一样的。众所周知,jsp的最后形态就是servlet,而jsp页首设置的那个内容其实也就是让生成的servlet中生成这么两句话:


response.setContentType( "text/html" );
response.setCharacterEncoding( "UTF-8" );

而pageEncoding则是跟jvm说明了这个页面的内容要使用什么编码保存(这跟之后生成的CLASS有关系)。所以在servlet设置response的编码也是理所当然的了。

 方法四(很保险,但代码量很大,是个不错的选择.)

在发送ajax请求之前,对参数escape()两次( 例:name=escape(escape("张三")); ),然后再发送请求到服务器,服务器接收参数后,对参数unescape(),就可以得到正确的参数( 例:String name=unescape(request.getParameter("name")); ).

附java版的unescape实现

public static String unescape (String src)
 ...{
    StringBuffer tmp = new StringBuffer();
    tmp.ensureCapacity(src.length());
    int lastPos=0,pos=0;
    char ch;
    while (lastPos<src.length())
    ...{
     pos = src.indexOf("%",lastPos);
     if (pos == lastPos)
      ...{
      if (src.charAt(pos+1)=='u')
       ...{
       ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);
       tmp.append(ch);
       lastPos = pos+6;
       }
      else
       ...{
       ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);
       tmp.append(ch);
       lastPos = pos+3;
       }
      }
     else
      ...{
      if (pos == -1)
       ...{
       tmp.append(src.substring(lastPos));
       lastPos=src.length();
       }
      else
       ...{
       tmp.append(src.substring(lastPos,pos));
       lastPos=pos;
       }
      }
    }
    return tmp.toString();
 }

附:prototype ajax乱码解决方法(已经过测试可行)
prototype对传递的参数都进行了编码转换工作,每个传递值通过encodeURIComponent 进行了处理.编码会被转换成utf-8,在后台获取request时,应该统一使用request.setCharacterEncoding("UTF-8")对request设置编码,而不必管页面的编码格式是什么.如果使用post方法进行传递数据,则会自动执行:

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhanngle/archive/2008/01/24/2063490.aspx

分享到:
评论

相关推荐

    ajax乱码解决方案

    总的来说,解决Ajax乱码问题的关键在于理解字符编码的工作原理,确保数据在整个传输过程中的编码与解码一致性,以及正确设置服务器和客户端的编码设置。在实际应用中,还应考虑跨平台和跨浏览器的兼容性,以确保解决...

    Ajax乱码小结

    ### Ajax乱码问题详解 #### 一、Ajax乱码概述 在使用Ajax技术进行前后端交互的过程中,常常会遇到字符编码的问题,特别是当涉及到中文或其他非ASCII字符时,容易出现乱码现象。根据题目中的描述,“Ajax乱码:当...

    Ajax乱码解决方案(docx)

    Ajax乱码问题主要涉及到字符编码的处理,包括服务器端、客户端以及文件的编码设置。解决Ajax乱码问题的关键在于确保整个数据传输链路上的编码一致性。 1. **字符编码** - **UTF-8**:广泛使用的编码格式,支持多种...

    解决ajax乱码和页面传值问题

    一、解决Ajax乱码问题 Ajax发送和接收数据时,乱码问题主要出现在两个环节:发送请求时的数据编码和服务器返回数据的解码。以下是解决乱码的关键步骤: 1. 数据编码:在发送Ajax请求前,确保你的数据已经正确编码...

    AJAX乱码解决大全.doc

    ### AJAX乱码问题详解与解决策略 #### 编码基础概览 乱码问题往往源自于数据在传输过程中编码方式的不一致。在探讨AJAX乱码解决之道前,我们首先来了解一下几种常见的编码格式: - **UTF-8**:全球最广泛使用的...

    ajax乱码解决汇总

    【Ajax乱码问题详解】 在Web开发中,Ajax(异步JavaScript和XML)技术被广泛应用于实现页面的无刷新更新,然而,与之相伴的一个常见问题是字符编码导致的乱码现象。本文将深入探讨Ajax乱码问题的成因及其解决方案。...

    Ajax乱码解决办法

    本文将详细探讨Ajax乱码的产生原因以及解决方案。 ### 一、乱码产生的原因 1. **服务器端编码不一致**:如果服务器返回的数据编码格式与客户端(浏览器)的预期编码不同,就会产生乱码。例如,服务器返回UTF-8编码...

    ajax乱码ajax乱码ajax乱码ajax乱码ajax乱码

    ### AJAX乱码问题详解 #### 一、引言 在Web开发中,AJAX(Asynchronous JavaScript and XML)技术被广泛应用于实现网页的部分更新,从而提高用户体验。然而,在实际项目中,开发人员可能会遇到AJAX请求返回的数据...

    ajax乱码解决办法

    "ajax乱码解决办法"这个主题正是针对这类问题提供解决方案。 首先,我们需要理解Ajax请求中的乱码问题通常源于以下几个方面: 1. **服务器编码设置**:服务器返回的数据可能是以特定的字符编码格式(如GBK或UTF-8...

    Ajax中文乱码问题解决方案

    然而,在处理中文字符时,Ajax请求可能会遇到乱码问题,这主要是由于编码格式不一致或者处理不当导致的。本文将深入探讨Ajax中文乱码问题的成因,并提供一系列解决方案。 **一、问题原因** 1. **编码格式不一致**...

    Ajax乱码解决方案

    ### Ajax乱码解决方案 在进行Ajax开发的过程中,经常会遇到数据编码问题导致的乱码现象。这类问题虽然看似简单,但若处理不当,则可能耗费大量时间进行调试与解决。本文将结合一个具体的案例来探讨如何有效地解决...

    Ajax 乱码

    ### Ajax 乱码问题解析与解决方案 #### 一、乱码基本概念 乱码是指由于字符编码不一致或处理不当而导致的文字显示异常现象。在Web开发中,尤其是在使用Ajax进行前后端交互时,乱码问题尤为常见。乱码通常发生在以下...

    struts,ajax乱码解决方案

    【Struts和Ajax乱码解决方案】 在Web开发中,乱码问题始终是一个常见的困扰,特别是对于使用Struts和Ajax技术的开发者来说。乱码问题主要出现在数据的输入、传输和展示过程中,涉及到编码格式的选择和一致性。以下...

    Ajax中文乱码问题解决方法

    首先,我们需要理解Ajax乱码的根源。当JavaScript发送HTTP请求时,如果服务器和客户端之间关于字符编码的约定不一致,就会导致乱码。常见的原因包括: 1. **请求头设置不正确**:Ajax请求默认使用UTF-8编码,但...

    ajax解决中文乱码(java/jsp)

    ### AJAX解决中文乱码(Java/JSP) #### 知识点概述 在Web开发中,尤其是在使用Java与JSP技术栈进行开发时,经常会遇到的一个问题是:如何处理AJAX请求中的中文字符乱码问题。本篇文章将详细介绍如何通过前端编码...

    Ajax FireFox IE 乱码兼容问题

    在IT领域,特别是Web开发中,字符编码的处理是一大挑战,尤其是在跨浏览器、跨平台的环境下,如在Ajax请求中遇到的FireFox与IE之间的乱码兼容问题。本文将深入探讨这一问题,并提供详细的解决方案。 ### Ajax与字符...

    jsp中文乱码总结包括 ajax中文乱码

    针对java web开发方面中文乱码情况的总结,基本各种情况都有了!

    Extjs Ajax 乱码问题解决方案

    Extjs Ajax乱码问题的出现通常与字符编码的不一致有关,无论是在客户端提交到服务器的数据还是服务器返回给客户端的数据中都可能出现乱码。解决此问题通常需要对编码过程和开发环境进行细致的调整。 首先,了解乱码...

    ajax 乱码的一种解决方法

    总的来说,处理AJAX乱码问题,需要在服务器端和客户端都考虑到编码转换的问题,并根据不同的开发环境选择合适的转换工具和方法。务必确保在数据传输过程中的每一个环节都正确地处理了编码转换,才能避免乱码的产生,...

Global site tag (gtag.js) - Google Analytics