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

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

 用XMLHTTP Post Form时的表单乱码有两方面的原因——Post表单数据时中文乱码;服务器Response被XMLHTTP不正确编码引起的乱码。换句话说,本文主要解决两个问题——怎样正确Post中文内容&怎样正确显示得到的中文内容。

Part I Post中文内容

先看看E文的表单是怎么提交的:

<SCRIPT language="JavaScript">
strA = "submit1=Submit&text1=scsdfsd";
var oReq = new ActiveXObject("MSXML2.XMLHTTP");
oReq.open("POST","http://ServerName/VDir/TstResult.asp",false);
oReq.setRequestHeader("Content-Length",strA.length);
oReq.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
oReq.send(strA);
</SCRIPT>


  如果把strA = "submit1=Submit&text1=scsdfsd";换成:strA = "submit1=Submit&text1=中文";

你会发现提交上去的东东根本不对,ASP中Request.Form("Text1")根本取不到值。俺用Request.BinaryRead把一个HTML Form中的Post内容写出来看了看,才发现问题——Form提交时也要编码的,编码后的中文是类似于%??%??的转义字符,比如“中文”就被编码为:%D6%D0%CE%C4。呵呵,也怪俺笨,人家CONTENT-TYPE里明明写的清清楚楚——application/x-www-form-urlencoded,urlencoded嘛当然就是这个样子了。既然这样,那我们也知道该怎么办了——自己做转换,代码见下:

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
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
</ScRIPT>

(在这里俺把前面的JavaScript的代码改成了VBScript,不是吃饱了撑的没事干,原因见后)

标签:乱码,编码,xmlhttp,utf8,gb312
0
投稿

猜你喜欢

  • python判断一个集合是否包含了另外一个集合中所有项的方法

    2022-01-15 19:08:06
  • Python英文文本分词(无空格)模块wordninja的使用实例

    2022-05-12 07:10:16
  • MySQL适配器PyMySQL详解

    2024-01-16 23:49:11
  • PHP封装的数据库模型Model类完整示例【基于PDO】

    2023-11-15 21:06:42
  • SQL Server 2005通用分页存储过程及多表联接应用

    2024-01-13 22:39:31
  • ASP导出Excel数据的四种办法

    2007-08-26 18:32:00
  • tensorflow 自定义损失函数示例代码

    2023-03-13 21:37:18
  • python 实现简单的计算器(gui界面)

    2022-11-14 14:35:14
  • Python中模块pymysql查询结果后如何获取字段列表

    2023-07-23 18:52:54
  • python argparse传入布尔参数false不生效的解决

    2023-07-03 16:12:20
  • PHP addAttribute()函数讲解

    2023-06-06 09:03:45
  • 解说mysql之binlog日志以及利用binlog日志恢复数据的方法

    2024-01-28 08:39:57
  • Python中方法的缺省参数问题解读

    2022-10-07 17:00:45
  • Go项目编写Makefile规则文件概述

    2024-02-06 01:20:07
  • Select count(*)、Count(1)和Count(列)的区别及执行方式

    2024-01-28 14:43:04
  • Pytorch四维Tensor转图片并保存方式(维度顺序调整)

    2023-09-11 23:26:54
  • JS实现利用两个队列表示一个栈的方法

    2024-02-26 12:41:03
  • el-input无法输入的问题和表单验证失败问题解决

    2024-04-09 10:48:37
  • Python字典循环添加一键多值的用法实例

    2021-07-15 14:48:48
  • JS完美实现对象克隆

    2008-08-03 16:51:00
  • asp之家 网络编程 m.aspxhome.com