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了。有没有一种简单的方法能达到我想要的效果,分不多,红包可以有。哪位大神帮帮忙 满足我的需求:我只想在要这个一模一样的加密方法 返回加密后的字符串就行了。 展开
我也想在java 里面实现同样的效果,尝试了java 的ScriptEngineManager ,但是行不通,提示是btoa 未定义(是因为window.btoa是浏览器的内置函数),又尝试了htmlUnit,用来加载本地的一个包含有该js的html 页面,虽然是可以,但是这个参数是固定的。还有一种方法就是动态的修改该html了。有没有一种简单的方法能达到我想要的效果,分不多,红包可以有。哪位大神帮帮忙 满足我的需求:我只想在要这个一模一样的加密方法 返回加密后的字符串就行了。 展开
1个回答
展开全部
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编码),这个方案你可以试试效果
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询