欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > JS教程 >

ajax乱码处理总结

发表于2019-04-24 12:07| 次阅读| 来源网络整理| 作者session

摘要:ajax乱码处理总结

ajax乱码处理总结

  先说说Ajax乱码的起源成绩,为什么会出现乱码呢?!在Web运用程序中,常用的编码模式包括GBK、GB2312、UTF-8/UTF-16/UTF-32、ISO8859_1。其中,ISO8859_1用来编码拉丁文,其由单字节(0--255)组成。GBK、GB2312用于编码简体中文,它们由单字节和双字节混合组成,最高位为1的字节和下一个字节造成一个汉字,最高位为0的字节是ASCII码。UTF-8/UTF-16/UTF-32是国际标准UNICODE的编码模式。用得最多的是UTF-8,次要是由于它在对拉丁文编码时浪费空间,而且可能示意各个语种,容易国际化。通常,Web运用程序采用GBK或许GB2312来显示中文内容。常用的,Ajax有两种模式可能向服务器传送申请内容,一种是GET,将申请内容以“?parameterName1=value1&parameterName2=value2”字符串的方式附加在URI前面,以附加参数的方式交给XMLHttpRequest对象的open()方法传送;另外一种是POST,加性能申请内容以“parameterName1=value1&parameterName2=value2”字符串的方式传递给XMLHttpRequest对象的send()方法传送。在Ajax运用程序中,对于GET模式,与传统的通讯模式一样,XMLHttpRequest对象会将申请的URI连同附带参数一同编码,一切空格、标点、重音符号以及其余非ASCII字符都用%xx编码代替,其中xx等于示意该字符的十六进制数。例如,空格前往的是"%20"。在Tomcat中,假设从http申请中获取的中文内容未通过编码(间接经过request.getParameter()方法获取),其将显示为“?????”等方式的乱码。对于POST模式,默许的XMLHttpRequest对象则采用UTF-8的编码模式传送。假设Web运用程序原本就是用的UTF-8编码的话,那么接纳到的数据是失常的;假设其编码是GB2312的话,成绩就来了,POST过来的数据是UTF-8,而整个Web运用程序是用GB2312来显示,那么一切的中文字符将全副变成乱码。对于Ajax运用程序来说,为保证中文内容顺利显示,可能采取如下模式一致编码。1、JSP文件一致采用GB2312或许ISO8859_1的编码模式。2、在Servlet或许JSP中获取以GET模式传送的中文内容,将其以GB2312或许ISO8859_1的模式转码再保存或许显示。3、在Servlet或许JSP中获取以POST传送的中文内容,将其以UTF-8的模式转码再保存或许显示。4、也可能让一切的JSP、Servlet、Java类都利用UTF-8的编码模式,不过这还需求调整相应的IDE设置或许Web服务器设置。
  
  这个成绩不是靠写出什么教程之类的货色就能理解和处理的.
  
  最重要的是你要知道xmlhttp在底层是如何和服务端通讯的,也就是它是如何读取服务端前往的内容.
  
  responseText:
  
  能解释UCS-2或许UCS-4,默许以UTF-8来解释服务端前往的字符流,不对字符流的内容做任何判别,所以你的innerHTML.xml中写的<?xmlversion="1.0"encoding="GBK"?>对这个函数没有任何意义,由于它只是文本流中的一行字符内容.
  
  responseXml:
  
  对接发进去的数据作为dom对象来解析,当然会对其中的内容如字符集,DTD,schema,等做相应解析,简略说不只仅是"接纳",而且要"解决"
  
  responseBody:
  
  任何内容以原始的二进制byte接纳,(在网络层就是原始的ununsignedchar序列,java中示意为byte)不对内容做任何字符集假定.但它一次性将数据前往为一个byte[]
  
  responseStream:
  
  同上,但前往为一个流接口,要你本人从中读取byte
  
  所以假设你仅把一个名为xml的文档作为原始文本文件用responseText前往,你在文档里面任何设置属性都不会起作用.