xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312)(2)

时间:2008-05-02 21:02:00 

 

  Part II.正确显示得到的中文内容

OK,如果你在Server端把Form的内容写到数据库/文件的话,你在那里看到的中文毫无问题,但是,假如你想看看Server的Response——问题来了:如果Response的结果不是XML,XMLHTTP.responseXML里当然是不会有东东的,那就用responseText好了,在代码的最后加一句:alert(oReq.responseText) 。看看俺们辛勤劳动的结果。

  但是但是.....怎么所有的中文全变成了方格? (我打不出来,有兴趣自己去试,也不用Post,Get一个含有中文的网页就可以发现了。)

  原因很简单:XMLHTTP得到Response时假定Response是UTF8编码的,如果Response是XML,那还可以通过encoding来指定编码,但HTML就不行了。(见鬼的GB2312,再次打倒!)所以它把含GB2312编码的HTML当成UTF8格式,不出错才有鬼!

  不过好在还有补救的办法:XMLHTTP的responseBody 属性里包含的可是未解码的Resonse——"a raw undecoded bytes as received directly from the server" :),唯一的问题是,responseBody返回的是一个unsigned bytes数组,我们怎么去访问它,怎么把它转换成BSTR?

  这就是为什么我在上面把代码改成VBScript的原因——VBScript Can do it,but JavaScript Cannot!

  代码见下:

<SCRIPT language="VBScript">
Function URLEncoding(vstrIn)
strReturn = ""
For i = 1 To Len(vstrIn)
ThisChr = Mid(vStrIn,i,1)
If Abs(Asc(ThisChr)) < &HFF Then
strReturn = strReturn & ThisChr
Else
innerCode = Asc(ThisChr)
If innerCode < 0 Then
innerCode = innerCode + &H10000
End If
Hight8 = (innerCode And &HFF00)\ &HFF
Low8 = innerCode And &HFF
strReturn = strReturn & "%" & Hex(Hight8) & "%" & Hex(Low8)
End If
Next
URLEncoding = strReturn
End Function
Function bytes2BSTR(vIn)
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn,i,1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn,i+1,1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
bytes2BSTR = strReturn
End Function
strA = URLEncoding("submit1=Submit&text1=中文")
oReq = CreateObject("MSXML2.XMLHTTP")
oReq.open "POST","http://ServerName/VDir/TstResult.asp",false
oReq.setRequestHeader "Content-Length",Len(strA)
oReq.setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
oReq.send strA
alert bytes2BSTR(oReq.responseBody)
</SSRIPT>
标签:乱码,编码,xmlhttp,utf8,gb312
0
投稿

猜你喜欢

  • mysql drop database删除数据库命令实例讲解

    2024-01-18 19:40:01
  • 详解OpenCV和PIL读取和显示图像的差异

    2021-07-06 22:17:22
  • 解决Python命令行下退格,删除,方向键乱码(亲测有效)

    2023-01-02 16:30:25
  • 如何使用Pytorch完成图像分类任务详解

    2023-10-05 16:37:05
  • 本地机apache配置基于域名的虚拟主机详解

    2023-11-17 07:40:37
  • Python logging模块handlers用法详解

    2022-08-24 18:08:08
  • Pycharm远程连接服务器并实现代码同步上传更新功能

    2023-09-20 04:44:40
  • Git可视化教程之Git Gui的使用

    2022-12-10 03:12:06
  • Python实现简单猜数字游戏

    2021-03-22 14:31:50
  • golang API请求队列的实现

    2024-03-11 16:39:50
  • tensorflow 1.0用CNN进行图像分类

    2022-08-17 17:32:29
  • vue-form表单验证是否为空值的实例详解

    2024-04-30 10:40:03
  • 全网最详细的PyCharm+Anaconda的安装过程图解

    2023-11-03 17:36:35
  • Python导入模块包原理及相关注意事项

    2023-01-26 04:46:31
  • 网页设计标准尺寸

    2008-06-15 15:21:00
  • Python 实现「食行生鲜」签到领积分功能

    2023-02-25 16:26:00
  • 前端框架之封装Vue第三方组件三个技巧

    2023-07-02 16:37:03
  • 详解pandas中Series()和DataFrame()的区别与联系

    2023-06-24 23:05:46
  • Python利用3D引擎做一个太阳系行星模拟器

    2022-02-03 11:00:58
  • 对python文件读写的缓冲行为详解

    2022-11-09 09:59:08
  • asp之家 网络编程 m.aspxhome.com