有时候我们去请求第三方接口,但是他们的参数需要加密处理之后通过base64编码形式拼接在url后面,而这块很容易出现一个异常:java.net.MalformedURLException: Illegal character in URL
//代码如下:
public static String encrypt(String str){
byte[] b = null;
String s = null;
try {
b = str.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (b != null) {
s = new BASE64Encoder().encode(b);
}
return s;
}
原因:
因为我引入的是包是import sun.misc.BASE64Encoder; sun.misc 包是 Sun 公司提供给内部使用的专用 API;这个Base64编码后的字符串中会多出一些换行符,所以出现了上面的异常
解决方案:
1:我们将编码后的字符串replace(“\r\n”,””),这个只适用用windows下,因为linux下换成符是\n;
2:使用org.apache.commons.codec.binary.Base64 包对原字符串进行base64编码
` Base64.encodeBase64String(b)