浏览器中不能直接传递中文以及一些特殊符号,一般转unicode编码,对于一些特殊符号,编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。
处理方法是,通过URLEncoder转为utf-8编码,然后将+全部替换为%20。
/**
*@param urlpath
*@param isFile
*@return
*--------------------
*TODO 将url里面的中文路径的斜杠捕捉转为正常,同时中文转码
*--------------------
*/
public static String ecodeUrlWithUTf8(String urlpath, Boolean isFile) {
if (urlpath == null)
return "";
urlpath = urlpath.replaceAll("\\\\+", "/");// 替换所有反斜杠
String decodedurl = "";
try {
URL url = new URL(urlpath);
decodedurl = "http://" + url.getHost() + ":" + url.getPort();
String path = url.getPath();
System.out.println(path);
String[] paths = path.split("\\/");
String fileExtension = "";
if (isFile && paths.length > 0 && paths[paths.length - 1].contains(".")) {// 最后一个有.
// //
// ,说明可能是文件后缀
String laststr = paths[paths.length - 1];
String[] splits = laststr.split("\\.");
fileExtension = "." + splits[splits.length - 1];
int index = laststr.length() - fileExtension.length();
paths[paths.length - 1] = laststr.substring(0, index);
}
String decodepath = "";
for (int i = 0; i < paths.length; i++) {
if (paths[i] != null && paths[i].length() > 0) {// 这里传入的链接必须是uft-8编码
String str = "";
str = URLEncoder.encode(paths[i], "UTF-8").replace("+", "%20");
decodepath = decodepath + "/" + str;
}
}
decodedurl = decodedurl + decodepath + fileExtension;
} catch (Exception e) {
return urlpath;
}
return decodedurl;
}