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 格式存储

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值