解决URL路径包含中文以及特殊符号

来源:互联网 发布:cf手游抢红包软件 编辑:程序博客网 时间:2024/05/17 02:29

浏览器中不能直接传递中文以及一些特殊符号,一般转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;}


0 0