今天看了看同事给我的《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编码,与页面编码无关。
===========================================
转载于:https://blog.51cto.com/wuguohua/1673316