2011-09-06 36 views
3

某個站點(不受我控制)有一個內部搜索引擎,它使用的GET請求如下所示:something.com/search?query=%u0001%0101,我希望在我的Java代碼中使用它。必須使用UTF-16 URL編碼來提交Java搜索。我怎麼能夠?

據我瞭解,這是一種不常用的方式(UTF-16)來進行Url編碼。我嘗試使用HttpURLConnection與上述類型的Url,但是這會引發我一個java.net.URISyntaxException Malformed escape pair at index X(X是%u0001的位置)。

我該怎麼辦?我對這些網址編碼問題很陌生,所以任何建議都將非常感謝。

+0

也許你必須雙重編碼?首先是UTF-16,然後是URL編碼? – home

+0

不知道你的意思,但也許這將澄清:首先我編碼的Unicode字符爲ASCII以匹配網站的語法(假如%$# - >%u0000%u0002%u0500),然後我從他們創建一個URL,並嘗試打開連接。所以我的代碼是這樣的:Url(「something.com/search?query=%u0000%u0002%u0500」)。openConnection(); – DannyA

+0

對於我的具體情況,[答案在這裏](http://stackoverflow.com/questions/2280863/uri-encoding-in-unicode-for-apache-httpclient-4)解決了這個問題。儘管我還沒有嘗試過,但我的搜索得出的結論是,麥克道威爾有一個正確和更一般的方法。 – DannyA

回答

1

形式something.com/search?query=%u0001%0101違反作爲百分比字符被保留用於percent-encoding URI規範。在此規則下,百分比符號後面必須跟兩個十六進制數字。這不是有效的UTF-16編碼的URI。

在這些地址上引發錯誤並不奇怪。

您可能不得不求助於打開socket併發送自己的格式錯誤client request

GET /search?query=%u0001%0101 HTTP/1.1 
Host: something.com 
+0

謝謝!我想你是對的,如果我沒有發現另一種「意外」在我的情況下工作的方式,那我就會這麼做......(最終回答我自己的問題) – DannyA

0
+0

謝謝。我認爲這種方法編碼的格式與我所尋找的格式不同。它會創建:%00%01 ASCII,而不是我嘗試使用的網站所需的%u0001格式。 – DannyA

+0

@DannyA你編碼的字符串是什麼,你期待它後來看起來像什麼? – CrackerJack9

+0

該字符串可以是任何我想要搜索的內容(例如「דני」),我需要的結果是上述格式的內容(例如,本例中的「%u05D3%u05E0%u05D9」)。但unicode的特定ASCII格式不是一個問題(我可以使用chars一點)。根據我的理解,問題是具有此(%uXXXX)編碼的URL被java的庫視爲格式錯誤。 – DannyA

相關問題