如何編碼動態字符串值以創建URL實例?我需要用%20,重音,非ASCII字符替換空格...? 我試圖使用URLEncoder,但它也編碼'/'字符,如果我給URLEncoder編碼的字符串到URL構造函數,我得到一個MalformedURLException(沒有協議)。Java - 編碼URL
12
A
回答
3
所以你說的是你想要編碼你的URL的一部分,但不是整個事情。聽起來像你不得不把它分解成部分,通過編碼器傳遞你想要編碼的那些,然後重新組裝它以獲得你的整個URL。
32
URLEncoder
有一個很有誤導性的的名字。它是根據Javadocs使用的編碼格式參數使用MIME類型application/x-www-form-urlencoded
。
用這個說法它可以用於編碼例如查詢參數。例如,如果一個參數看起來像&/?#
其編碼相當於可以一起使用:
String url = "http://host.com/?key=" + URLEncoder.encode("&/?#");
除非你有URL javadocs建議使用new URI(..).toURL
根據RFC2396執行URI編碼的特殊需求。
推薦的方法來管理URL的編碼和解碼是使用URI
以下示例
new URI("http", "host.com", "/path/", "key=| ?/#ä", "fragment").toURL();
產生結果http://host.com/path/?key=%7C%20?/%23ä#fragment
。請注意0等字符是如何編碼的而不是。
欲瞭解更多信息,請參閱文章HTTP URL Address Encoding in Java或how to encode URL to avoid special characters in java。
編輯
由於您的輸入是一個字符串的URL,使用URI
的參數的構造函數的人會幫不了你。你也不能直接使用new URI(strUrl)
,因爲它沒有引用url參數。
所以在這個階段,我們必須使用的手段來得到你想要的東西:
public URL parseUrl(String s) throws Exception {
URL u = new URL(s);
return new URI(
u.getProtocol(),
u.getAuthority(),
u.getPath(),
u.getQuery(),
u.getRef()).
toURL();
}
之前,你可以使用這個程序,你必須sanitize
您的字符串,以確保它代表一個絕對 URL。我看到兩種方法:
猜測。除非已經存在,否則將
http://
添加到字符串中。
相關問題
- 1. 在java中的url編碼?
- 2. 與URL編碼的Java URL編碼參數
- 3. Java郵件中的URL編碼
- 4. 使用Java編碼URL查詢參數
- 5. java RestTemplate GET請求與編碼的URL
- 6. 在Java中檢測URL的編碼
- 7. Java和Solr中的Url編碼問題
- 8. 來自URL的Java InputStreamReader不編碼「Umlaute」
- 9. URL編碼不編碼
- 10. 編碼URL
- 11. URL編碼
- 12. ASP.Net URL編碼
- 13. 編碼URL
- 14. C - URL編碼
- 15. URL編碼PHP
- 16. SAFARI URL編碼
- 17. URL編碼PHP
- 18. URL編碼
- 19. Knockout.js URL編碼
- 20. 編碼URL參數
- 21. 對URL進行URL編碼
- 22. Java servlets:如何將URL編碼爲SessionTrackingMode是URL?
- 23. URL編碼和解碼
- 24. Url編碼時段?
- 25. 進度URL編碼
- 26. url編碼在ios
- 27. 編碼webservice API url
- 28. URL編碼「+」字符
- 29. URL編碼問題?
- 30. 拆分URL編碼
請舉一些例子說明字符串和你的代碼從上下文構造URL。 – 2011-06-01 09:27:22
不同的編碼規則將適用於不同的[部分URI](http://illegalargumentexception.blogspot.com/2009/12/java-safe-character-handling-and-url.html#URI2009_ANATOMY)。正如Lukas所建議的那樣,請提供您開始使用哪些信息以及想要結束的示例。 – McDowell 2011-06-01 10:45:13