前面说了 Ajax 乱码的原因,以及解决乱码的示例,下面来个全面的分析。
XMLHTTP 返回的数据默认的字符编码是 UTF-8,如果前台页面是 GB2312 或者其它编码数据就会产生乱码。
POST 方法提交数据默认的字符编码是 UTF-8,如果后台是 GB2312 或其他编码数据就会产生乱码。
后台解决办法:
针对静态文件:
HTM、XML 文件是静态的,所以只要保存时保存为 UTF-8 编码就可以了,以 XHTML 为例:
改为
改为
并保存,原理及常见问题请参见:Ajax 乱码。
针对动态文件:
ASP 文件一般是动态的,通用的办法也是将该 ASP 文件保存为 UTF-8 编码。使用 response.charset = "utf-8" 仍会造成乱码。
前台解决办法:
针对 GET 数据:
对字符串进行编码,比如将 request.asp?a=汉字 编码为:request.asp?a=%E6%B1%89%E5%AD%97,这就需要一个函数。在 ASP 中我们在《UTF-8 Unicode Ansi 汉字GB2321几种编码转换程序》一文中作过相关介绍。而在 JavaScript 中,幸运的是这个函数已经被集成,我们可以直接在 JavaScript 使用。我们建议使用encodeURIComponent对参数值进行编码,它可以编码所有的字符,而encodeURI不对“:”、“/”、“;”和“?”进行编码。对于参数值,显然应该是对所有字符进行编码。具体可见示例。
针对 POST 数据:
增加一句:
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
具体可见示例。
相关阅读