Web

URL 編碼

參考資料:(https://blog.gtwang.org/programming/url-percent-encoding-and-decoding-using-java/)

Encoder

java.net.URLEncoder

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class URLEncode {
  public static void main(String[] args) {

    // 待編碼的網址
    String url = "http://www.gtwang.org/目錄?var1=中文&var2=spa ce";

    try {
      // 進行 URL 百分比編碼
      String encodedURL = URLEncoder.encode(url, "UTF-8");

      // 輸出結果
      System.out.println(encodedURL);

    } catch (UnsupportedEncodingException e) {
      // 例外處理 ...
    }
  }
}

Decoder

java.net.URLDecoder

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
public class URLDecode {
  public static void main(String[] args) {

    // 待解碼的網址
    String encodedURL = "http%3A%2F%2Fwww.gtwang.org%2F%E7%9B%AE%E9%8C%84%3Fvar1%3D%E4%B8%AD%E6%96%87%26var2%3Dspa+ce";

    try {
      // 進行 URL 百分比解碼
      String url = URLDecoder.decode(encodedURL, "UTF-8");

      // 輸出結果
      System.out.println(url);

    } catch (UnsupportedEncodingException e) {
      // 例外處理 ...
    }
  }
}

另外 因為有可能被重複編碼 為了徹底解碼,可以這樣寫

// 百分比解碼函數
public static String decode(String url) {
  try {
    String prevURL = "";
    String decodeURL = url;
    while(!prevURL.equals(decodeURL)) {
      prevURL = decodeURL;
      decodeURL = URLDecoder.decode( decodeURL, "UTF-8" );
    }
    return decodeURL;
  } catch (UnsupportedEncodingException e) {
    return "Error: " + e.getMessage();
  }
}

Last updated