Ajax 乱码详细

作者:msf 来源:ITPOW(原创) 日期:2007-1-29

前面说了 Ajax 乱码的原因,以及解决乱码的示例,下面来个全面的分析。

  • XMLHTTP 返回的数据默认的字符编码是 UTF-8,如果前台页面是 GB2312 或者其它编码数据就会产生乱码。
  • POST 方法提交数据默认的字符编码是 UTF-8,如果后台是 GB2312 或其他编码数据就会产生乱码。

  • 后台解决办法:

    针对静态文件:

    HTM、XML 文件是静态的,所以只要保存时保存为 UTF-8 编码就可以了,以 XHTML 为例:
    <?xml version="1.0" encoding="gb2312"?>
    改为
    <?xml version="1.0" encoding="utf-8"?>

    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    改为
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    并保存,原理及常见问题请参见: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");

    具体可见示例

    相关阅读

    JavaScript 中解决 Microsoft.XMLHTTP 乱码的最简单方法

    相关文章