2017-06-16 16 views
0

的JS是encodeURI相當於我有一個文件路徑:的Java

file://///10.10.10.10/Yev Pri - Ru─▒n G├╢z├╝yle Ortado─Яu.pdf 

這表現爲:

file://///10.10.10.10/Ye%20Pri%20-%20Ru%E2%94%80%E2%96%92n%20G%E2%94%9C%E2%95%A2z%E2%94%9C%E2%95%9Dyle%20Ortado%E2%94%80%D0%AFu.pdf 

<a/>標記HTML,當我檢查它。我想在Java中生成相同的字符串。當我與

URLEncoder.encode(path, StandardCharsets.UTF_8.displayName())

file%3A%2F%2F%2F%2F%2F10.10.10.10%2FYev+Pri+-+Ru%E2%94%80%E2%96%92n+G%E2%94%9C%E2%95%A2z%E2%94%9C%E2%95%9Dyle+Ortado%E2%94%80%D0%AFu.pdf 

編碼它看來,瀏覽器應用encodeURI()。我怎樣才能得到相同的字符串與瀏覽器?

+1

[Java相當於產生相同輸出的JavaScript的encodeURIComponent?]的可能副本(https://stackoverflow.com/questions/607176/java-equivalent-to-javascripts-encodeuricomponent-that-produces-identical-outpu) –

+0

@KarlReid感謝您的鏈接。但是這個答案不適用於我的問題。這是一個URL路徑,'/'不是由瀏覽器編碼的? – kamaci

+0

夠公平的,對不起。它看起來像@ VGR的答案在這裏做你所需要的。 –

回答

2

URLEncoder用於編碼表單數據。要創建一個轉義URL或URI,使用java.net.URI class

URI uri = new URI("file", "///10.10.10.10/Yev Pri - Ru─▒n G├╢z├╝yle Ortado─Яu.pdf", null); 
String escapedURI = uri.toASCIIString(); 

注意:您不能使用new URI("file://///10.10.10.10/Yev Pri - Ru─▒n G├╢z├╝yle Ortado─Яu.pdf")因爲構造函數不執行字符%的轉義可能不合法,直接出現在的URI。類文檔明確指出單參數構造函數期望參數已經有適當的轉義。

+0

那麼,我不能用這個作爲答案? – kamaci

+1

您可以使用帶* *參數的URI構造函數,就像我的代碼塊使用的一樣。您不能使用帶有一個參數的URI構造函數。 – VGR