`
yaojaylone
  • 浏览: 12412 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

ajax servlet中文乱码

 
阅读更多

<script>  
var XMLHttpReq=false;
   function checkProviderName(){
    if( "" == DWRUtil.getValue('name').trim() ){
      alert("
服务商全称不能为空");
      ProviderForm.name.focus();
      return false;
     }else if( validateCN(DWRUtil.getValue('name').trim()) ){
         alert("
服务商全称输入错误");
         ProviderForm.name.focus();
         return false;
     }else if( validateSafe(DWRUtil.getValue('name').trim())){
      alert('
服务商全称不要使用非法字符!');
      ProviderForm.name.focus();
      return false;
     }

     if(window.XMLHttpRequest){ //Mozilla
           XMLHttpReq=new XMLHttpRequest();
          
        }else if(window.ActiveXObject){
           try{
            XMLHttpReq=new ActiveXObject("Msxml2.XMLHTTP");
           }catch(e){
           try{
            XMLHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
           }catch(e){}
           }
        }
        var temp=DWRUtil.getValue('name').trim();
        
        
        var url="<%=request.getContextPath()%>/action/service_provider.do?act=checkProviderName&name="+encodeURI(encodeURI(temp));//
要执行两次的encodeURI////关键!!!!!
      
        XMLHttpReq.open("GET",url,true);
        XMLHttpReq.;
        
        XMLHttpReq.setrequestheader("cache-control","no-cache");
        
        XMLHttpReq.setrequestheader("Content-Type","text/html; encoding=UTF-8");

        XMLHttpReq.send(null);
  }
  function checkP(){
        if(XMLHttpReq.readyState==4){ //
对象状态
           if(XMLHttpReq.status==200){//
信息已成功返回,开始处理信息    
                 <!--
测试读取xml开始-->
          var root=XMLHttpReq.responseXML;
          var res=root.getElementsByTagName("res")[0].firstChild.data;
          window.alert(res);
          
           <!--
测试读取xml结束-->  
          }else{
             window.alert("
所请求的页面有异常");
          }
        }
      }
</script>

action.
public ActionForward checkProviderName(
   ActionMapping mapping, ActionForm form,
     HttpServletRequest request, HttpServletResponse response) throws Exception{
  ProviderForm providerForm =(ProviderForm)form;
  response.setContentType("text/xml; charset=UTF-8");
  PrintWriter out = response.getWriter();
  out.println("<response>");
  String strNameEn = java.net.URLDecoder.decode(providerForm.getName(), "UTF-8");////
解码关键!!!!
  System.out.println("sname+++++++++++>>"+strNameEn);
  if(checkProviderName(strNameEn)){
   out.println("<res>" + "
可以注册!" + "</res>");
  }else{
   out.println("<res>" + "
不可以注册!" + "</res>");
  }
  out.println("</response>");
  return null;

Javascript escape(), encodeURI(), encodeURIComponent()

出处:http://aaron-ch.javaeye.com/blog/80160

关键字: Ajax,URI encode

escape():

The escape method returns a string value (in Unicode format) that contains the contents of [the argument]. All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding, where xx is equivalent to the hexadecimal number representing the character. For example, a space is returned as "%20."


 

encodeURI():

The encodeURI method returns an encoded URI. If you pass the result to decodeURI, the original string is returned.

The encodeURI method does not encode the following characters: ":", "/", ";", and "?".

Use encodeURIComponent to encode these characters.

encodeURIComponet():

The encodeURIComponent method returns an encoded URI. If you pass the result to decodeURIComponent, the original string is returned. Because the encodeURIComponent method encodes all characters, be careful if the string represents a path such as /folder1/folder2/default.html. The slash characters will be encoded and will not be valid if sent as a request to a web server. Use the encodeURI method if the string contains more than a single URI component

When to use which?

The escape() method does not encode the + character which is interpreted as a space on the server side as well as generated by forms with spaces in their fields. Due to this shortcoming and the fact that this function fails to handle non-ASCII characters correctly, you should avoid use of escape() whenever possible. The best alternative is usually encodeURIComponent().

escape() will not encode: @*/+

Use of the encodeURI() method is a bit more specialized than escape() in that it encodes for URIs  as opposed to the querystring, which is part of a URL. Use this method when you need to encode a string to be used for any resource that uses URIs and needs certain characters to remain un-encoded. Note that this method does not encode the ' character, as it is a valid character within URIs.

encodeURI() will not encode: ~!@#$&*()=:/,;?+'

Lastly, the encodeURIComponent() method should be used in most cases when encoding a single component of a URI. This method will encode certain chars that would normally be recognized as special chars for URIs so that many components may be included. Note that this method does not encode the ' character, as it is a valid character within URIs.

encodeURIComponent() will not encode: ~!*()'

对比 javascript url编码

原文:http://www.javaeye.com/topic/198530

escape() 方法: 采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20
不会被此方法编码的字符:
@ * / +

encodeURI()
方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。

不会被此方法编码的字符:
! @ # $& * ( ) = : / ; ? + '

encodeURIComponent()
方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。

不会被此方法编码的字符:
! * ( ) '
因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent

另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。

为什么要连续两次调用 encodeURI(String) 方法?

原文:http://hi.baidu.com/zhuguoneng/blog/item/96ca9c1f3d67a966f724e465.html


     
是因为 Java 中的 request.getParameter(String) 方法会进行一次 URI 的解码过程,调用时内置的解码过程会导致乱码出现。
     
URI 编码两次后, request.getParameter(String) 函数得到的是原信息 URI 编码一次的内容。
     
接着用 java.net.URLDecoder.decode(String str,String codename) 方法,将已经编码的 URI 转换成原文。

 

分享到:
评论

相关推荐

    ajax到servlet乱码解决

    例如,我们使用 AJAX 通过 URL 传递中文参数 "中文测试" 给 Servlet,Servlet 在接收参数时却变成了乱码 "�������"。这使得我们的应用程序无法正确地处理中文参数。 解决方案 要解决这个问题,我们可以从两...

    servlet中文乱码问题

    ### Servlet + Tomcat 中文乱码问题解析及解决方案 #### 一、中文乱码问题概述 在使用Servlet和Tomcat进行Web开发时,经常会遇到中文乱码的问题。这主要是因为客户端(如浏览器)与服务器之间使用的字符编码不一致...

    jQuery Ajax传值到Servlet出现乱码问题的解决方法

    在开发Web应用时,我们经常会遇到前端与后端交互的问题,特别是使用jQuery的Ajax与Servlet进行数据通信时,乱码问题是一个常见的困扰。本文将详细解释如何解决jQuery Ajax向Servlet传递参数时出现的乱码问题。 首先...

    ajax提交中文乱码解决方法

    ### AJAX提交中文乱码解决方法 在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过JavaScript发起异步请求,与服务器进行数据交换,从而...

    ajax提交中文到servlet

    本文将深入探讨“ajax提交中文到servlet”的相关知识点,以解决在异步传输过程中处理中文字符的问题。 一、Ajax基础 Ajax的核心是通过JavaScript创建XMLHttpRequest对象,它允许浏览器在不重新加载整个网页的情况下...

    Struts框架下Ajax发送中文乱码问题的解决

    在实际应用中,我们常常会遇到Ajax与服务器交互时出现中文乱码的问题,尤其是在发送和接收中文数据时。这个问题主要涉及到字符编码的处理,解决起来需要对HTTP协议、字符编码原理以及Struts框架的工作机制有一定的...

    Ajax+Servlet 实例

    通过这种方式,我们可以创建一个兼容IE7的Ajax请求,并使用Servlet处理这些请求,同时解决可能出现的乱码问题。这个实例不仅展示了Ajax和Servlet的基本用法,还强调了在实际开发中考虑浏览器兼容性和编码问题的重要...

    ajax+jsp+servlet 中文解决方法

    在这个"ajax+jsp+servlet 中文解决方法"的示例中,开发者遇到了在使用Ajax进行数据交互时中文乱码的问题。中文乱码通常是由字符编码不一致导致的,特别是在跨平台或跨浏览器通信时。以下是一些关于如何解决这个问题...

    ajax与Servlet,传值Demo

    这个“ajax与Servlet,传值Demo”着重展示了如何利用Ajax实现页面局部更新,同时处理Servlet接收到的Ajax传递的数据,包括解决中文乱码问题。 Ajax的核心在于JavaScript,它允许网页在不重新加载整个页面的情况下与...

    JSP中 ajax的get请求的中文乱码问题的解决方法.pdf

    综上所述,解决JSP中Ajax GET请求的中文乱码问题需要从服务器配置、Servlet处理、JSP页面编码和Ajax请求等多个角度综合考虑,并进行相应的调整。通过这些步骤,可以有效地避免并解决中文乱码问题,保证数据传输的...

    java+ajax处理乱码实例

    本实例将探讨如何在Java后端和Ajax前端交互过程中解决字符编码问题,防止出现乱码。 在Java中,处理字符编码的关键在于正确设置输入流和输出流的编码。当接收到Ajax请求时,服务器需要正确识别请求中的编码,同时在...

    Ajax乱码小结

    在使用Ajax技术进行前后端交互的过程中,常常会遇到字符编码的问题,特别是当涉及到中文或其他非ASCII字符时,容易出现乱码现象。根据题目中的描述,“Ajax乱码:当调用`request.getParameter()`函数时,会自动进行...

    ajax乱码解决方案

    UTF-8编码是一种常见的Unicode实现,它使用1到4个字节来表示每个Unicode字符,对于中文汉字,通常每个字占用3个字节。因此,当Ajax发送或接收UTF-8编码的数据时,理论上不应出现乱码。 然而,乱码问题可能源于以下...

    struts下的汉字乱码问题

    总结来说,解决Struts下的汉字乱码问题,需要从页面、过滤器、服务器配置和Struts核心Servlet等多方面进行设置,确保在整个请求生命周期中,中文字符始终以正确的编码进行处理。这不仅涉及了前端的展示,还涉及到...

    AJAX技术使用XMLHttpRequest对象传递参数的中文乱码问题

    xmlhttp.open("POST", "AjaxServlet", true); // 设置请求头,指定Content-Type为application/x-www-form-urlencoded xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // 对...

    AJAX中文乱码

    ### AJAX中文乱码解决方案 在Web开发中,尤其是使用AJAX技术进行前后端交互时,中文乱码问题是一个常见的挑战。AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的...

    Ajax uri 乱码问题总结

    Ajax URI 乱码问题主要涉及浏览器差异和服务器配置两方面,尤其在处理非 ASCII 字符时,编码格式的不一致可能导致乱码。以下是对这个问题的详细解析和解决方案: 1. **浏览器差异**: - **Internet Explorer (IE)*...

    ajax中文乱码问题解决方案

    **Ajax中文乱码问题详解与解决方案** 在开发Web应用程序时,尤其是在处理中文字符时,Ajax中文乱码问题是一个常见的困扰。这是因为不同的系统、浏览器、服务器和文件可能使用不同的字符编码,导致数据在传输过程中...

    ajax中文乱码的各种解决办法总结.docx

    在开发过程中,Ajax(异步JavaScript和XML)技术常常用于实现网页的无刷新交互,但与之相伴的一个常见问题是中文乱码。以下是一些解决Ajax中文乱码问题的方法: 1. **请求头设置**: 当发送Ajax请求时,需要确保...

Global site tag (gtag.js) - Google Analytics