Welcome to Delicate template
Header
Just another WordPress site
Header

asp用jquery输出html中文是乱码的问题

5月 28th, 2010 | Posted by 无 名 in asp

今天遇到了一个问题,在asp里用jquery输出一段中文,竟然是乱码
$(“#comment”).html(“中文”)
解决方法:
我们必须指明送出的是什么编码流。
所以在asp里面要加上这句:
Response.Charset = “GB2312”

一下是转载过来的文章,供参考学习。
asp jquery乱码
产生乱码主要有2个原因:
(1)xtmlhttp 返回的数据默认的字符编码是“utf-8”,如果前台页面是“gb2312”或者其它编码数据就会产生乱码
(2)post 方法提交数据默认的字符编码是“utf-8”,如果后台是“gb2312”或其他编码数据就会产生乱码

解决的办法就是在送出的流里面加一个HEADER,指明送出的是什么编码流,这样XMLHTTP就不会乱搞了。

PHP:header(‘Content-Type:text/html;charset=GB2312’);
ASP:Response.Charset(“GB2312”)
JSP:response.setHeader(“Charset”,”GB2312″);

上面所说的方法,在异步获取数据时是有效的,但是,在异步提交数据时往往会失效,哪怕在我们提交数据时用上了 Javascript 的函数 escape() 对提交的数据进行编码。因此,解决Ajax乱码最完美的方法,看来只有将网页的编码改用“utf-8”,至少是与 Ajax 相关的所有网页必须用“utf-8”编码。

下面是另外一种方法:

偶用 jQuery 的 $.post() 方法异步获取数据时,在服务端(asp)加上 Response.Charset=”GB2312″ ,返回显示正常,不过,在用 $.post() 方法提交数据时,服务端接收到的数据就变成了乱码(服务端加了 Response.Charset=”GB2312″ 也一样),根据以前(在用jQuery之前)的经验,我就用 Javascript 函数 escape() 将提交的数据进行了编码,这回情况好了一些,服务端接收到的数据变成了“xx%x%x%”。偶想了想,以前这种方法有效,应该是 ASP 的 Request() 方法会自动进行相应的解码。因此,如果我能在 ASP 下用 Javascript 的函数 unescape() 进行解码,问题应该就可以解决。于是,偶摆渡并苦钩了几圈,在网上发现了个不错的函数,一个用 ASP 实现的和 Javascript 下的 unescape() 函数有相同功能的函数,换句话说,是一个可以直接在 ASP 下直接解码用 Javascript 下的函数 escape() 编码的数据的函数。试了一试,果真有效。

经测试,此方法也是比较完美的一种。

假设:提交的数据是 sendData = “偶是个懒虫” ,以下是偶的程序代码片断:

发送端:

sendData = escape("偶是个懒虫")
$.post(
   "saveData.asp"
   ,
   { sendData: sendData }
   function(data){
   alert(data);
   ...
   }
);

服务端:

<%
requestData = VBsUnEscape( Request.Form("sendData") )
Response.Write requestData
%>

前前后后都是“偶是个懒虫”,问题到此,又得到了一个相对完美的解决(虽说此方法,还是有些麻烦)!

以下给出 ASP 下的 escape() 函数和 unescape() 函数的具体实现方法:

<%
'escape()函数实现,不变的7个符号: *(42) +(43) -(45) .(46) /(47) @(64) _(95)
Function VBsEscape(str)
   dim i,s,c,a
   s=""
   For i=1 to Len(str)
   c=Mid(str,i,1)
   a=ASCW(c)
   If (a>=48 and a<=57) or (a>=65 and a<=90) or (a>=97 and a<=122) Then
   s = s & c
   ElseIf InStr("@*_+-./",c)>0 Then
   s = s & c
   ElseIf a>0 and a<16 Then
   s = s & "%0" & Hex(a)
   ElseIf a>=16 and a<256 Then
   s = s & "%" & Hex(a)
   Else
   s = s & "%u" & Hex(a)
   End If
   Next
   VBsEscape = s
End Function

'unescape()函数
Function VBsUnEscape(str)
   dim i,s,c
   s=""
   For i=1 to Len(str)
   c=Mid(str,i,1)
   If Mid(str,i,2)="%u" and i<=Len(str)-5 Then
   If IsNumeric("&H" & Mid(str,i+2,4)) Then
   s = s & CHRW(CInt("&H" & Mid(str,i+2,4)))
   i = i+5
   Else
   s = s & c
   End If
   ElseIf c="%" and i<=Len(str)-2 Then
   If IsNumeric("&H" & Mid(str,i+1,2)) Then
   s = s & CHRW(CInt("&H" & Mid(str,i+1,2)))
   i = i+2
   Else
   s = s & c
   End If
   Else
   s = s & c
   End If
   Next
   VBsUnEscape = s
End Function
%>

You can follow any responses to this entry through the RSS 2.0 Both comments and pings are currently closed.