您的位置:首页 > 其它

解决中文乱码问题的超值方法

2007-06-13 08:46 489 查看
在使用ajax传递中文参数的时候,常常会因为编码方式的不同而出现乱码问题。
根据乱码出现的原因可以知道,只要调整编码方式,就可以解决乱码问题,比如在get或post方法里用request拿参数之前,设置一下编码方式,如:request.setCharacterEncoding("gb2312"),但是各个环境可能需要设置相应的编码方式,这让初学着感到杂乱无章;此外tomcat下编码方式默认是iso-8859-1,有时页面上使用的是utf-8,由于iso-8859-1两个字节一个汉字,utf-8是三个字节一个汉字,这个时候就会出现奇数汉字传值时最后一个汉字乱码。在这个情况下,另外一种解决中文乱码的方式相对而言就更直观,更让人容易接受,那就是使用escape/unescape(编码/解码)。
只要在传递参数前,将中文参数编码(如:pars=escape(pars)),传递完成之后再解码(如:pars=unescape(pars)),就可以得到传递的中文。
escape/unescape在javascript中有现成的方法,直接调用即可,而在服务器端的方法也很容易实现,下面就是escape/unescape在java中的实现:
//java中的escape方法的实现
public 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,pos));
lastPos=pos;
}
}
}
return tmp.toString();
}
//java中的unescape方法的实现
public 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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: