URL由來:
一般來說,URL隻能使用英文字母、阿拉伯數字和某些标點符号,不能使用其他文字和符号。比如,世界上有英文字母的網址 “http://www.abc.com”,但是沒有希臘字母的網址“http://www.aβγ.com”(讀作阿爾法-貝塔-伽瑪.com)。這是 因為網絡标準RFC 1738 做了硬性規定:
"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."
“隻有字母和數字[0-9a-zA-Z]、一些特殊符号“$-_.+!*'(),”[不包括雙引号]、以及某些保留字,才可以不經過編碼直接用于 URL。”
這意味着,如果URL中有漢字,就必須編碼後使用。但是麻煩的是,RFC 1738沒有規定具體的編碼方法,而是交給應用程式(浏覽器)自己決定。這導緻“URL編碼”成為了一個混亂的領域。
下面就讓我們看看,“URL編碼”到底有多混亂。我會依次分析四種不同的情況,在每一種情況中,浏覽器的URL編碼方法都不一樣。把它們的差異解釋 清楚之後,我再說如何用Javascript找到一個統一的編碼方法。
具體代碼如下:(切記切記,一定要注意編碼)
package com.util;
import java.io.UnsupportedEncodingException;
/**
* url轉碼、解碼
*
* @author lifq
* @date 2015-3-17 下午04:09:35
*/
public class UrlUtil {
private final static String ENCODE = "GBK";
/**
* URL 解碼
*
* @return String
* @author lifq
* @date 2015-3-17 下午04:09:51
*/
public static String getURLDecoderString(String str) {
String result = "";
if (null == str) {
return "";
}
try {
result = java.net.URLDecoder.decode(str, ENCODE);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
* URL 轉碼
*
* @return String
* @author lifq
* @date 2015-3-17 下午04:10:28
*/
public static String getURLEncoderString(String str) {
String result = "";
if (null == str) {
return "";
}
try {
result = java.net.URLEncoder.encode(str, ENCODE);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
*
* @return void
* @author lifq
* @date 2015-3-17 下午04:09:16
*/
public static void main(String[] args) {
String str = "測試1";
System.out.println(getURLEncoderString(str));
System.out.println(getURLDecoderString(str));
}
}
限時領取免費Java相關資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并發分布式、大資料、機器學習等技術。
資料傳送門:https://mp.weixin.qq.com/s/u2b_NVNuMuAPE0w4lc45fw
關注下方公衆号即可免費領取: