不能直接對URL整體處理,因為?、&、=都會被編碼掉(Python可以直接處理),以下為處理的代碼
public class MyURLEncoding { public static void main(String[] args) throws Exception { String str = "http://www.baidu.com?wd=中國&language=簡體漢語&size=Song14"; String result = GetRealUrl(str); System.out.println(result); } //對url中的參數進行url編碼 public static String GetRealUrl(String str) { try { int index = str.indexOf("?"); if (index < 0) return str; String query = str.substring(0, index); String params = str.substring(index + 1); Map map = GetArgs(params); String encodeParams = TransMapToString(map); return query + "?" + encodeParams; } catch (Exception ex) { System.out.println(ex.getMessage()); } return ""; } //將url參數格式轉化為map public static Map GetArgs(String params) throws Exception { Map map = new HashMap(); String[] pairs = params.split("&"); for (int i = 0; i < pairs.length; i++) { int pos = pairs[i].indexOf("="); if (pos == -1) continue; String argname = pairs[i].substring(0, pos); String value = pairs[i].substring(pos + 1); value = URLEncoder.encode(value, "utf-8"); map.put(argname, value); } return map; } //將map轉化為指定的String類型 public static String TransMapToString(Map map) { java.util.Map.Entry entry; StringBuffer sb = new StringBuffer(); for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext(); ) { entry = (java.util.Map.Entry) iterator.next(); sb.append(entry.getKey().toString()).append("=").append(null == entry.getValue() ? "" : entry.getValue().toString()).append(iterator.hasNext() ? "&" : ""); } return sb.toString(); } //將String類型按一定規則轉換為Map public static Map TransStringToMap(String mapString) { Map map = new HashMap(); java.util.StringTokenizer items; for (StringTokenizer entrys = new StringTokenizer(mapString, "&"); entrys.hasMoreTokens(); map.put(items.nextToken(), items.hasMoreTokens() ? ((Object) (items.nextToken())) : null)) items = new StringTokenizer(entrys.nextToken(), "="); return map; } }