2011-06-03 73 views
0

我不知道我完全理解URI對象才能正確執行此操作。我希望能夠將字符串轉換爲url編碼的字符串。例如,我有一個servlet充當文件處理程序,我需要在標題中指定的文件名 -URL編碼字符串不是有效的URI

response.setHeader("Content-disposition", "attachment;filename=" + new URI(filename).toUrl()); 

正如預期的那樣,我得到一個URISyntaxException因爲我編碼字符串不是正確的URI表單。

如何編碼字符串而不是URL?

我不能使用折舊的URLEncoder得到我想要的結果,因爲它用「+」而不是「%20」代替「」。

在此先感謝!

+0

你的文件名是什麼樣的? – 2011-06-03 17:48:38

+0

這是它遇到麻煩的空間。假設我上傳一個名爲「hello world.txt」的文件,當我下載它時,我會得到「hello + world.txt」。我很挑剔,因爲這一點,但它使我厭惡! – 2011-06-03 17:56:53

回答

1

你可以使用URLEncoder和簡單地%20更換所有+

此外,URLEncoder.encode(String s, String enc)不被棄用。可以使用org.springframework.web.util.UriUtils.encodeUri

+0

啊,我不知道,我認爲這是一般的encode()方法。這是一個無賴,但它看起來像我必須按照你的建議,用%20替換+ ...出於某種原因,它不覺得優雅。 – 2011-06-03 17:58:04

+1

增加了一個更優雅的選擇。 – rid 2011-06-03 18:05:13

+0

因爲我已經有彈簧加載這應該工作得很好。我用你的解決方案對它進行編碼,然後發現它使用編碼字符提供文件......當我真的需要將我的純字符串包含在引號中時。 O_o – 2011-06-03 18:06:45

1

您最好使用new File(filename).toURI().toURL()。這將爲文件名創建正確的編碼。它也適用於不存在的相對文件名和文件。實際上這個構造不會執行任何文件系統訪問。

+0

正如你所說的那樣工作,但它給了文件的完整路徑。一點點lastIndexOf魔術,它會發揮一樣的。非常感謝! – 2011-06-03 18:05:13

-2

使用java.net.URLEncoder

例如

String s = "[email protected]%#$%^3<<>>"; 
String encoded_string = URLEncoder.encode(s, "UTF-8"); 
+0

不針對URL正確處理空格,僅針對URL參數。 – EJP 2011-06-03 22:33:35

2

URLEncoder的是不是網址,奇怪的是,它是真正的URL 參數和需要的應用程序/ X WWW的形式 - 其他的事情urlencoded MIME編碼。我發現URL編碼任意字符串的最簡單方法是new URI(null, s, null).toASCIIString()