Ajax乱码解决终极方案
CAnca
-----------------------------------------------------------------------------------
原创作品,CAnca Software Office.如要转载,请保留版权信息!
E-mail:cancait@msn.com
-----------------------------------------------------------------------------------
1. 使用JS中的encodeURIComponent或encodeURI方法。
说明:
encodeURIComponent(String)
对传递参数进行设置。不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z。
例:
var url = “<a href=’http://cancait.blog.163.com/name=” + encodeURIComponent(“中国”) + “’>中国</a>”;
encodeURI(String)
对URL整体转换。不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z。
例:
var url = “<a href=’” + encodeURI(“http://cancait.blog.163.com/name=中国”) + “’>中国</a>”;
乱码处理实例:
/////////////////////////////////////////////////////////////////////////////////////
初始页面内容如下(hello.jsp):
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
提交
" onclick="justdo()"/>
/////////////////////////////////////////////////////////////////////////////////////
ajax
请求处理页面(
act.jsp
)的内容如下
:
/////////////////////////////////////////////////////////////////////////////////////
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%String path = request.getContextPath();%>
<%@page import="java.net.URLDecoder"%>
<%
//
遍历输出参数内容。
for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
String h = (String) e.nextElement();
String v = request.getParameter(h);
String mm = java.net.URLDecoder.decode(v
,
"UTF-8");
System.out.println("
请求参数
: " + h + " = " + mm);
}
%>
/////////////////////////////////////////////////////////////////////////////////////
说明:
java.net.URLencode 和 java.net.URLDecode 分别对应于 JavaScript中的encodeURI 和 decodeURI、encodeURIComponent 和 decodeURIComponent.
为什么要连续两次调用encodeURI(String)方法呢?是因为Java中的request.getParameter(String)方法会进行一次URI的解码过程,调用时内置的解码过程会导致乱码出现。而URI编码两次后,request.getParameter(String)函数得到的是原信息URI编码一次的内容。接着用java.net.URLDecoder.decode(String str,String codename)方法,将已经编码的URI 转换成原文。
2. 使用JS中的escape 方法。
说明:
escape(String)
对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
例:
乱码处理实例:
/////////////////////////////////////////////////////////////////////////////////////
例子跟上面一样。只有这里不同。
(hello.jsp)
post = escape(post);
post = escape (post);//两次,很关键
(act.jsp)
String h = (String) e.nextElement();
String v = request.getParameter(h);
String mm = EscapeUnescape.unescape(v, "UTF-8");
System.out.println("请求参数: " + h + " = " + mm);
/////////////////////////////////////////////////////////////////////////////////////
(EscapeUnescape.java)Java中的escape和unescape.内容如下:
/////////////////////////////////////////////////////////////////////////////////////
package cn.kgnews.util;
public class EscapeUnescape {
public static String escape(String src) {
int i;
char j;
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length() * 6);
for (i = 0; i < src.length(); i++) {
j = src.charAt(i);
if (Character.isDigit(j) || Character.isLowerCase(j)
|| Character.isUpperCase(j))
tmp.append(j);
else if (j < 256) {
tmp.append("%");
if (j < 16)
tmp.append("0");
tmp.append(Integer.toString(j, 16));
} else {
tmp.append("%u");
tmp.append(Integer.toString(j, 16));
}
}
return tmp.toString();
}
public static String unescape(String src) {
StringBuffer tmp = new StringBuffer();
tmp.ensureCapacity(src.length());
int lastPos = 0, pos = 0;
char ch;
while (lastPos < src.length()) {
pos = src.indexOf("%", lastPos);
if (pos == lastPos) {
if (src.charAt(pos + 1) == 'u') {
ch = (char) Integer.parseInt(src
.substring(pos + 2, pos + 6), 16);
tmp.append(ch);
lastPos = pos + 6;
} else {
ch = (char) Integer.parseInt(src
.substring(pos + 1, pos + 3), 16);
tmp.append(ch);
lastPos = pos + 3;
}
} else {
if (pos == -1) {
tmp.append(src.substring(lastPos));
lastPos = src.length();
} else {
tmp.append(src.substring(lastPos
要重装电脑啦!!在这里保存一下。。呵呵。 Taconite:很多东东自己写。但这个的速度飞快。 Scriptaculous:这个东东最爽。哈哈。 ... DWR是一个框架,简单的说就是能够在javascript直接调用java方法,而不必去写一大堆的javascript代码。它的实现是基于ajax的,可以实现无刷新效果。 &n... 1、最小配置 java代码: <servlet> <servlet-name>dwr-invoker</servlet-name&... 概述options 请求就是预检请求,可用于检测服务器允许的 http 方法。当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起 OPTIONS 请求,即 CORS 预检请...相关文章
新认识的Ajax框架
DWR中各种java方法的调用
dwr配置文件dwr.xml详解
options请求(跨域预检)