随着AJAX的流行。Java世界也开始改变。
出现了大量的AJAX框架。
但是总有一部分人。总有那么一些人。就是TM的喜欢自己实现。
比如,我。
当然。我也用了框架,但是呢,有的时候用自己做的会好一点。
SOSO。但是却有中文乱码问题。因为我服务器端用的是GBK编码。
直接使用JS传参数,服务器取就是null。
于是在JS定义如下:
/**
* 防止乱码的转码
* */
EncodeUtil.encoding = function(str){
str = encodeURI(str);
str = encodeURI(str);
return str;
}
这个是用来对传递的参数值进行转码
如:"myHello.jsp?userName="+userName;
这段代码是在JS中出现的。我需要传递userName到服务器去。
那么在这句之前,我需要做这么一步:
userName = EncodeUtil.encoding(userName);
好了。你可以尝试alert输出一下。
可以看见的是一串你看不懂的东西。
那就对了。
那么在对应的服务器端对应的进行转码。
你可以用java.net.URLDecoder.decode(str,encode);
DEMO:userName = URLDecoder.decode(getUserName,"UTF-8");
getUserName是用request取到的。
因为JS中默认是用的UTF-8编码。所以我们要将这个转换为当前系统的默认编码。
以上是JDK1.4或更高版本可用。
如果是JDK1.3。那么需要自己写一个转换。
如下:
以上所有方式均为本人从网络中收集整理而成。非原创。
出现了大量的AJAX框架。
但是总有一部分人。总有那么一些人。就是TM的喜欢自己实现。
比如,我。
当然。我也用了框架,但是呢,有的时候用自己做的会好一点。
SOSO。但是却有中文乱码问题。因为我服务器端用的是GBK编码。
直接使用JS传参数,服务器取就是null。
于是在JS定义如下:
/**
* 防止乱码的转码
* */
EncodeUtil.encoding = function(str){
str = encodeURI(str);
str = encodeURI(str);
return str;
}
这个是用来对传递的参数值进行转码
如:"myHello.jsp?userName="+userName;
这段代码是在JS中出现的。我需要传递userName到服务器去。
那么在这句之前,我需要做这么一步:
userName = EncodeUtil.encoding(userName);
好了。你可以尝试alert输出一下。
可以看见的是一串你看不懂的东西。
那就对了。
那么在对应的服务器端对应的进行转码。
你可以用java.net.URLDecoder.decode(str,encode);
DEMO:userName = URLDecoder.decode(getUserName,"UTF-8");
getUserName是用request取到的。
因为JS中默认是用的UTF-8编码。所以我们要将这个转换为当前系统的默认编码。
以上是JDK1.4或更高版本可用。
如果是JDK1.3。那么需要自己写一个转换。
如下:
/**
* 将指定字符s转码为enc指定的编码数据
* @param String 要进行转码的字符
* @param String 指定的编码
* @return String 经过转码的字符
* */
public static String decode(String s, String enc) throws UnsupportedEncodingException {
boolean needToChange = false;
StringBuffer sb = new StringBuffer();
int numChars = s.length();
int i = 0;
if (enc.length() == 0) {
throw new UnsupportedEncodingException("URLDecoder: empty string enc parameter");
}//end if
while (i < numChars) {
char c = s.charAt(i);
switch (c) {
case '+':
sb.append(' ');
i++;
needToChange = true;
break;
case '%':
try {
byte[] bytes = new byte[ (numChars - i) / 3];
int pos = 0;
while (( (i + 2) < numChars) && (c == '%')) {
bytes[pos++] = (byte) Integer.parseInt(s.substring(i + 1, i + 3),16);
i += 3;
if (i < numChars) {
c = s.charAt(i);
}
}//end while
if ( (i < numChars) && (c == '%')) {
throw new IllegalArgumentException("URLDecoder: Incomplete trailing escape (%) pattern");
}//end if
sb.append(new String(bytes, 0, pos, enc));
}catch (NumberFormatException e) {
throw new IllegalArgumentException("URLDecoder: Illegal hex characters in escape (%) pattern - " + e.getMessage());
}//end catch
needToChange = true;
break;
default:
sb.append(c);
i++;
break;
}//end switch
}//end while
return (needToChange ? sb.toString() : s);
}//end method[decode]
以上所有方式均为本人从网络中收集整理而成。非原创。