上一篇剩下的问题,为了搞明白编码问题,进一步进行测试。
测试服务器端的设定,对客户端读取的影响。以及参数上传
相关的东西。
上回说到responseBody是未解码的二进制数据,而responseText是
解码后的字符串,而xmlhttp默认解码方式为utf-8字符集,对于没有指定返回数据编码的页面,
就会出现中文解码为乱码的情况。指定返回编码的方法:
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:response.Charset="GB2312"
JSP:response.setHeader("Charset","GB2312");
这样,responseText的数据中的中文应该就能正确解码了。
今天进行了测试,
测试环境: Windows XP + IIS5.1 + IE6.0
测试语言: ASP
测试结果:
编码设定情况 | responseText | responseBody | gb2utf8(responseBody) |
---|---|---|---|
服务器动态页面编码方式不设定 | 中文乱码 | 乱码 | 中文正常 |
服务器动态页面编码GB2312 | 中文正常 | 乱码 | 中文正常 |
服务器动态页面编码UTF-8 (动态页面要保存为UTF-8编码文件) |
中文正常 | 乱码 | 中文乱码 |
另外,作了xmlhttp参数请求的测试,该测试只是改变客户端的参数发送内容,而服务器端的处理
不变,看服务器接收到和解析出的信息是否和自己的目的参数一样。其中用到一中文URL编码的
函数,是从网上找来的,只对中文转码的话,是没有问题的,可发现对空格和特殊字符的处理是有
问题的。原版函数如下:
提交方式 | 提交内容 | request.QueryString | request.QueryString(pname) |
---|---|---|---|
GET的URL | 空格(写入空格) | 空格被转换成%20 | 空格 |
GET的URL | 空格(写入%20) | %20 | 空格 |
GET的URL | 空格(写入+) | + | 空格 |
GET的URL | 中文(直接写入中文) | 中文 | 中文 |
GET的URL | 中文(写入编码的中文) | 编码的中文 | 中文 |
POST的URL | 空格(写入URL空格) | 空格被转换成%20 | 空格 |
POST的URL | 空格(写入%20) | %20 | 空格 |
POST的URL | 空格(写入+) | +被转换成%20 | 空格 |
提交方式 | 提交内容 | request.request.Form | request.request.Form(pname) |
POST的form-urlencoded (实际POST内容没整体编码) |
空格(写入空格) | 空格 | 该空格删除 |
POST的form-urlencoded (实际POST内容没整体编码) |
空格(写入%20) | %20 | 空格 |
POST的form-urlencoded (实际POST内容没整体编码) |
空格(写入+) | + | 空格 |
POST的form-urlencoded (实际POST内容没整体编码) |
中文(直接写入中文) | 乱码 | 乱码 |
POST的form-urlencoded (实际POST内容没整体编码) |
中文(写入编码的中文) | 编码的中文 | 中文 |
POST的form-urlencoded (实际POST内容已整体编码) |
空格(编码为%20) | %20 | 空格 |
POST的form-urlencoded (实际POST内容已整体编码) |
空格(编码为+) | + | 空格 |
POST的form-urlencoded (实际POST内容已整体编码) |
中文(写入编码的中文) | 编码的中文 | 中文 |
好了,先这样吧,这两天废寝忘食的看这个东西,比上班还累10倍.
如果大家看到哪里写的不对,烦请留个言我改过来。