我試圖解析以下URI:http://translate.google.com/#zh-CN|en|你如何解析URI這樣在Java中
,但得到這個錯誤信息:
java.net.URISyntaxException: Illegal character in fragment at index 34: http://translate.google.com/#zh-CN|en|你
at java.net.URI$Parser.fail(URI.java:2809)
at java.net.URI$Parser.checkChars(URI.java:2982)
at java.net.URI$Parser.parse(URI.java:3028)
它有問題,用「|」字符,如果我擺脫了「|」,最後一箇中文字符不會引起任何問題,那麼處理這個問題的正確方法是什麼?
我的方法是這樣的:
public static void displayFileOrUrlInBrowser(String File_Or_Url)
{
try { Desktop.getDesktop().browse(new URI(File_Or_Url.replace(" ","%20").replace("^","%5E"))); }
catch (Exception e) { e.printStackTrace(); }
}
感謝您的答案,但BalusC的解決方案似乎只對URL的一個實例的工作,我的方法需要與任何URL我傳遞給它的,如何工作它會知道將URL分割成兩部分的起點和只編碼第二部分的起點?
參考:'URLEncoder'(儘管名稱)不應該用於URL編碼。該文檔說:_此類包含將字符串轉換爲application/x-www-form-urlencoded MIME格式的靜態方法._這與URIs/URL使用的編碼不同。 – McDowell 2009-12-01 21:29:48
BalusC的解決方案似乎適用於該實例的url,但我需要該方法適用於所有傳遞給它的url,它將如何知道從什麼起點解析剩餘的url? 這個網址就以下任何一項: www.yahoo.com/abc/xyz http://yahoo.com/abc/123/ yahoo.com/abc/123/... – Frank 2009-12-02 02:56:04
我認爲你需要將網址分割成片段......域,路徑,查詢字符串和片段。該域不應該被編碼。路徑,你將不得不用斜線分割,並對路徑的每一部分進行編碼,然後再將它們放在一起。對於查詢字符串,您需要對每個參數名稱和值進行編碼。你也必須編碼片段。然後,重新組裝URL。 – 2009-12-02 03:25:09