小毅收藏之------Java式实现JS的Escape以及Unescape

Posted on 2009-10-14 14:04 H2O 阅读(1529) 评论(0)  编辑  收藏 所属分类: java
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, pos));
                    lastPos 
= pos;
                }

            }

        }

        
return tmp.toString();
    }


    
public static void main(String[] args) {
        String tmp 
= "中文";
        System.out.println(
"testing escape : " + tmp);
        tmp 
= escape(tmp);
        System.out.println(tmp);
        System.out.println(
"testing unescape :" + tmp);
        System.out.println(unescape(
"%u6211%u4eec"));
    }

}

以上为一个工具类,为解决中文乱码
html前台:escape(escape('你好'))
后台:String txt=EscapeUnescape.unescape(aStringText); 

escape本身参数编码为ISO8859-1,escape中文传替给servlet会直接为null接收不到,经过以上特殊处理即可解决!其他方法也可,如:手动转码...

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 0, comments - 21, trackbacks - 0, articles - 101

Copyright © H2O