2011-05-04 91 views
0

在我的應用程序編碼URL我收到這樣的URL作爲與德國人物

http://www.wassersportlotse.de/php/lib/smart_image_resizer/image.php/Mühlendammschleuse.jpg?image=/media/images/uploads/Mühlendammschleuse.jpg 

當有在fullurl沒有德語字符我就可以使用它沒有編碼,它工作正常。但是,如果我收到上面的URL,則不起作用(導致問題)。下面我試圖編碼的URI的分開的部分無濟於事。一如既往的忠告非常感謝。

public ImageDownloader(String fullurl) throws URISyntaxException{ 
    URI uri = new URI(fullurl); 

    path = uri.getPath(); 
    path = URLEncoder.encode(path); 

    query = uri.getQuery(); 
    query = URLEncoder.encode(query); 

    auth = uri.getAuthority(); 

    url = "http://" + auth + path + query; 


} 

回答

1

也許編碼器編碼DAS變音爲UTF-8字符(所以ü將與兩個字符進行編碼),他們沒有正確的服務器一起放回(對我們來說並沒有使用Tomcat工作)。爲了解決這種情況,我們使用URLEncoder.encode(param, "ISO-8859-1")來編碼參數。

+0

我加了這個,但它仍然不起作用。我認爲問題在於它在查詢中對正斜槓進行編碼,這不起作用。 – jiduvah 2011-05-04 09:49:37

0

有沒有簡單的答案,因爲它取決於服務是URI其編碼有望在服務器上。

通常是UTF-8。

在這種情況下:使用String.getBytes,指定UTF-8編碼,並獲得從該一個字節數組。將所有字節< = 127按原樣重新編碼爲字符串數組,並用%hh表格替換所有其他字節數組。 (百分號,然後兩個十六進制數字)。見http://greenbytes.de/tech/webdav/rfc3986.html#rfc.section.2.1

+0

不幸的是,Android將一些字符編碼爲%hh%hh,這甚至導致Google自己的Web服務出現問題。 – bluewhile 2013-11-13 00:38:07

+0

bluewhile:您是否知道UTF-8編碼將非ASCII字符編碼爲多個字節? – 2013-11-13 08:48:16

+0

是的,你只是說它確實分成兩個字節,或者我理解你錯了。如果你通過ie = UTF-8參數告訴他們,甚至Google服務也能正常工作。對我感到羞恥。 – bluewhile 2013-11-13 17:29:54

0

您可以使用Android的Uri類來幫助你。該類有一個encode()方法,它將使用UTF-8編碼您的字符串。

0

我最近有其名稱包括變音符號和德國的特殊字符的圖片網址一個問題,我失去了一天尋找解決方案。如果文件名或目錄名中有ä或ü,圖像就不會出現。我認爲這可能是春天,或者我正在使用的其他Java技術,或者在瀏覽器中。奇怪的是,即使在URL編碼的情況下,也無法找到圖像。但最終,解決方案是在我的tomcat server.xml配置中。在你的server.xml文件中,找到你的連接器,並添加以下兩行:

URIEncoding="UTF-8" 
useBodyEncodingForURI="true" 

最後,它應該是這個樣子:

<Connector connectionTimeout="20000" 
port="8080" 
protocol="HTTP/1.1" 
redirectPort="8443" 
URIEncoding="UTF-8" 
useBodyEncodingForURI="true"/> 

現在我不需要URL編碼網址。這對我的客戶是一種幫助,因爲他們可以看到正確拼寫的德語單詞。

下面是另一個提示:如果您在eclipse中編寫代碼並從eclipse中啓動和停止服務器,那麼配置文件(server.xml)可能位於Servers文件夾中的eclipse工作區中。它必須在這裏進行更改才能使用eclipse。當你在主要的tomcat配置中進行了更改,並且這些URL在那裏工作時,這可能會令人發狂,但是在eclipse中運行服務器時它們仍然被破壞。

這爲我做。我希望它能幫助那裏的人! :-)

0

有你試過unsing:

android.net.Uri.encode(urlString, ":/"); 

它編碼的字符串,但跳過 「:」 和 「/」。