java实现js的中一样的函数方法

js脚本中有一个函数是function(password){returnbtoa(unescape(encodeURIComponent(password)));}我也想... js脚本中有一个函数是 function(password){return btoa(unescape(encodeURIComponent(password)));}
我也想在java 里面实现同样的效果,尝试了java 的ScriptEngineManager ,但是行不通,提示是btoa 未定义(是因为window.btoa是浏览器的内置函数),又尝试了htmlUnit,用来加载本地的一个包含有该js的html 页面,虽然是可以,但是这个参数是固定的。还有一种方法就是动态的修改该html了。有没有一种简单的方法能达到我想要的效果,分不多,红包可以有。哪位大神帮帮忙 满足我的需求:我只想在要这个一模一样的加密方法 返回加密后的字符串就行了。
展开
 我来答
伙哥_王爷
2017-03-15 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:73
采纳率:0%
帮助的人:47.7万
展开全部
package know.t5;
public class UrlEncodeWithoutASCII {
 public static String encode(String input)
    {
        StringBuilder sb = new StringBuilder(input.length() + 16);
        appendEncoded(sb, input);
        return sb.toString();
    }
    public static StringBuilder appendEncoded(StringBuilder sb, String input)
    {
        int safe[] = SAFE_ASCII;
        int i = 0;
        int c;
        for(int len = input.length(); i < len; i += Character.charCount(c))
        {
            c = input.codePointAt(i);
            if(c <= 127)
            {
                if(safe[c] != 0)
                    sb.append((char)c);
                else
                    appendSingleByteEncoded(sb, c);
            } else
            {
                appendMultiByteEncoded(sb, c);
            }
        }
        return sb;
    }
    private static final void appendSingleByteEncoded(StringBuilder sb, int value)
    {
     sb.append('%');
        sb.append(HEX[value >> 4]);
        sb.append(HEX[value & 15]);
    }
    private static final void appendMultiByteEncoded(StringBuilder sb, int value)
    {
        if(value < 2048)
        {
            appendSingleByteEncoded(sb, 192 | value >> 6);
            appendSingleByteEncoded(sb, 128 | value & 63);
        } else
        if(value < 65536)
        {
            appendSingleByteEncoded(sb, 224 | value >> 12);
            appendSingleByteEncoded(sb, 128 | value >> 6 & 63);
            appendSingleByteEncoded(sb, 128 | value & 63);
        } else
        {
            appendSingleByteEncoded(sb, 240 | value >> 18);
            appendSingleByteEncoded(sb, 128 | value >> 12 & 63);
            appendSingleByteEncoded(sb, 128 | value >> 6 & 63);
            appendSingleByteEncoded(sb, 128 | value & 63);
        }
    }
    private static final int SAFE_ASCII[];
    private static final char HEX[] = "0123456789ABCDEF".toCharArray();
    static 
    {
        SAFE_ASCII = new int[128];
        for(int i = 97; i <= 122; i++)
            SAFE_ASCII[i] = 1;
        for(int i = 65; i <= 90; i++)
            SAFE_ASCII[i] = 1;
        for(int i = 39; i <= 57; i++){
         if(i==43||i==44||i==47)
          continue;
         SAFE_ASCII[i] = 1;
        }
        SAFE_ASCII[33] = 1;
        SAFE_ASCII[95] = 1;
        SAFE_ASCII[126] = 1;
    }
}

encodeURIComponent函数可以用上面的类encode方法代替,unescape可以用任意URLDecoder代替,btoa可以用任意Base64工具代替(参数为byte[]时需将字符串按utf8编码),这个方案你可以试试效果

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式