zoukankan      html  css  js  c++  java
  • Ajax中异步处理时中文乱码解决方案

    前段在做Ajax异步处理时传参时遇到中文乱码问题,想起以前在用WebServerce 做服务时也碰到这样的问题,当时通过异步请求向WebService中传参,而Ajax中对中文支持不是太好,编码格式导致 出现了乱码,这个问题很长见,也尝试几种处理方法,今天加以小结.

    (1)分析Ajax出现中文乱码原因:

    XmlHttpRequest对象responseXML属性来完成异步请求的响应回传,能够触发这个动作的条件是响应头部的Content-Type 的MiME类型必须被指定为XML(text/XMl或者application/Xml),当前这个属性才会有值并且会被解析成一个XML文档 返回到客户端。一般情况下XMl默认为UTF-8的编码格式(还有其他具体分类)。

    中文乱码产生:

    XMlHttpRequest异步请求时向服务器端发送数据的编码格式是Unicode格式,

    请求响应到客户端而是XML文档 默认编码格式是UTF-8格式

    如果你的页面编码本来就是UTF-8,中文乱码就不会出现,而大部分的情况下一般页面设置是GB2312格式,这样转译格式发生了变化 导致乱码产生.而这种乱码出现方式分为两种,第一是页面显示的是乱码,另外一个就是想服务器端传送数据时中文成乱码

    (2)解决方案:

    方案一:统一页面编码格式  解决页面显示成乱码问题

    默认返回到客户端的是编码是UTF-8格式,那么我们工作就是修改页面编码格式即可,示例代码如下:

    --统一页面编码格式
    --Author:chenkai  Time:2009-6-4 11:54:34

    页首Page指令中添加两个属性:
     
    <%@ page contentType="text/html; charset=UTF-8"%>

    <Title>中设置:
      
    //小小的Meta 其实就是在报头请求中说明当前页面内容和编码格式
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    设置后页面显示上中文的显示时没有问题.

    方案二:转换编码格式 在服务器端解决中文乱码

    XmlHttpRequest通过open()方法发送请求,需要设定请求的报头:

    request.open("POST","Default.aspx?Value="+value,true);
      
    //设置Request报头 Content-Type 
    request.setRequestHeader("Content-Type","text/html;charset=gb2312");
      
    //设置主要目的是保证向服务器端发送数据  参的值有中文乱码问题 

     参数会设定字符编码格式gb2312 默认转换,同样如果在JS中对服务器端传送数据需要使用既定Escape()和UnEscape函数来处理中文字符乱码问题: 具体使用方法如下

    --Escape()函数定义及用法
    --Author:chenkai  Time:2009-6-4 14:07:01
    --Address:http://www.w3school.com.cn/js/jsref_escape.asp

    //JS中的Escape()函数用来处理String 字符窜进行编码以使计算机能够识别可读 使用方法:

    //定义:Escape(ChartSeting)  ChartSeting是必须的参数   参数是要编码的任意 String 对象或文字

    <script type="text/JavaScript" lanage="javascript">
     
    var getstr=escape('函数测试数据!');
    </script>

    //Escape()函数返回的是 ChartSeting内容的字符窜Unicode格式数据,
    //
    为什么是Unicode格式?因为在异步请求并传参是 默认格式就是Unicode 对应的汉字就能识别 

    //注意:
    //
    所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。字符值大于 255 的以 %uxxxx 格式存储
  • 相关阅读:
    ECharts之柱状图 饼状图 折线图
    Vue自定义指令(directive)
    HDU 1231 最大连续子序列
    POJ 2533 Longest Ordered Subsequence
    HDU 1163 Eddy's digital Roots
    HDU 2317 Nasty Hacks
    HDU 2571 命运
    HDU 4224 Enumeration?
    HDU 1257 最少拦截系统
    HDU 2740 Root of the Problem
  • 原文地址:https://www.cnblogs.com/chenkai/p/1496143.html
Copyright © 2011-2022 走看看