用javaScript向Servlet/JSP(GBK)进行传值的问题解决

随着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。那么需要自己写一个转换。

如下:

/**
* 将指定字符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]




以上所有方式均为本人从网络中收集整理而成。非原创。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值