package message.utils; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.BitSet; /** * 对url的处理工具类. * * @author sunhao(sunhao.java@gmail.com) * @version V1.0 * @createTime 2012-4-30 下午01:48:01 */ public class URLUtils { /** * 私有化构造器 */ private URLUtils(){} /** * character which don't need encoding in url */ private static BitSet unNeedEncoding; static { unNeedEncoding = new BitSet(256); int i; /** * [a-z],[A-Z],[0-9] in url not need encoding */ for(i = 'a'; i <= 'z'; i++){ unNeedEncoding.set(i); } for(i = 'A'; i <= 'Z'; i++){ unNeedEncoding.set(i); } for(i = '0'; i <= '9'; i++){ unNeedEncoding.set(i); } /**for same special letter*/ unNeedEncoding.set(' '); unNeedEncoding.set('-'); unNeedEncoding.set('_'); unNeedEncoding.set('.'); unNeedEncoding.set('*'); unNeedEncoding.set('+'); unNeedEncoding.set('%'); } /** * 判断URL是否被encoding * * @param url url * @return true是 false否 */ public static boolean isURLEncoding(String url){ if(StringUtils.isEmpty(url)){ return false; } char[] chars = url.toCharArray(); boolean result = false; for(char ch : chars){ if(Character.isWhitespace(ch)){ return false; } if(!unNeedEncoding.get(ch)){ return false; } if(ch == '%'){ result = true; } } if(!result){ return false; } return true; } /** * encoding URL * * @param url url * @return * @throws java.io.UnsupportedEncodingException */ public static String encodeURL(String url) throws UnsupportedEncodingException { return encodeURL(url, "UTF-8"); } /** * encoding url with character encoding named local * * @param url url * @param local character encoding * @return * @throws java.io.UnsupportedEncodingException */ public static String encodeURL(String url, String local) throws UnsupportedEncodingException { return URLEncoder.encode(url, local); } /** * decoding URL * * @param url url * @return * @throws java.io.UnsupportedEncodingException */ public static String decodeURL(String url) throws UnsupportedEncodingException { return decodeURL(url, "UTF-8"); } /** * decoding url with character encoding named local * * @param url url * @param local character encoding * @return * @throws java.io.UnsupportedEncodingException */ public static String decodeURL(String url, String local) throws UnsupportedEncodingException { return URLDecoder.decode(url, local); } }