今天看了看同事给我的《Java Web程序设计教程》,看到里面说ajax默认的编码方式是UTF-8,我的多疑性格促使我做了个实验,把js的编码都测试了。

1、UTF-8编码下:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

1.1测试js的编码函数,alert(encodeURIComponent("中国"));

  输出的结果为 %E4%B8%AD%E5%9B%BD,然后我在java代码里这样做System.out.println(URLEncoder.encode("中国", "UTF-8"));其结果是%E4%B8%AD%E5%9B%BD,这个验证了如果html编码是utf-8的话js的编码也是utf-8.

1.2测试表单序列化编码编码   用jquery的serialize方法,

    <form  id="form">

    <input type="text" name="name" value="中国"/>

   </form>  

   js中是  alert($("#form").serialize());alert出的结果是   name=%E4%B8%AD%E5%9B%BD

  看出也是utf-8编码。

1.3ajax编码  POST方式

   浏览器端:

 $.ajax({url:"server.jsp",data:{name:"中国"},type:"POST",success:function(){}});

   服务器端:

 String name = request.getParameter("name");

      System.out.println(Charset.defaultCharset());//平台默认的编码,

      System.out.println(name);

  控制台的输出结果为

UTF-8

中国

可见post方式提交的ajax的确是以UTF-8编码的。


1.4  ajax GET方式

浏览器端提交方式改为GET,其余不变,服务器端的代码如下

 <%

      String name = request.getParameter("name");

      System.out.println(new String(name.getBytes("ISO8859-1"),"UTF-8"));

   %>

输出结果是:  中国,表明仍然是UTF-8编码的。

===============================================================

从以上看出,在页面是UTF-8编码的情况下,js的编码都是UTF-8的。

==============================================================

然后测试页面编码是gbk的,这里直接上结论,因为流程一样的。

2 <meta http-equiv="Content-Type" content="text/html; charset=GBK">

2.1 JS   alert(encodeURIComponent("中国"));  测试结果仍然是UTF-8编码。

2.2 序列化  测试结果为  UTF-8编码

2.3 ajax POST    测试结果为  UTF-8

2.4ajax  GET   测试结果为  UTF-8(这个和我以前的认识是不一样的,以前以为会已GBK编码呢。要改正,我最后做个测试直接在地址栏里写路径+“?name=中国”,服务器端代码不变,

      String name = request.getParameter("name");

      System.out.println(new String(name.getBytes("ISO8859-1"),"UTF-8"));

仍然可以打印   中国

===========================================

结论:url编码和js编码是统一的,都是按照UTF-8编码,与页面编码无关。

===========================================