2012-03-13 33 views
0

我想一個字符串編碼成UTF-8,代碼:爲什麼標點字符會將英文字符編碼爲UTF 8?

URLEncoder.encode("http://www.example.com/sf?s=191ae04f&an=馬賽克.jpg","UTF-8"); 

,其結果是:

 
http%3A%2F%2Fwww.example.com%2Fsf%3Fs%3D191ae04f%26an%3D%C2%ED%C8%FC%BF%CB.jpg 

,你可以看到,標點符號,如:/? &,已經使用utf-8編碼,但是我希望看到的結果是:

 
http://www.example.com/sf?s=191ae04f&an=%C2%ED%C8%FC%BF%CB.jpg 

有什麼不對嗎?

回答

1

您URL編碼整個字符串,這樣就可以將其包含在URL,例如:

http://www.yyy.com?forward=http%3A%2F%2Fwww.xxx.com%2Fsf%3Fs%3D191ae04f%26an%3D%C2%ED%C8%FC%BF%CB.jpg 

但是,你似乎要的是隻編碼您的原始URL的參數值。因此,您必須拆分URL,僅對參數值進行URL編碼,然後重新組合。

+0

感謝名單,我已經知道劈裂字符串會做到最好的,但這種方式會在我的應用程序強加的開銷,那麼,有沒有什麼方法來轉換整個網址轉換爲utf-8而沒有對標點符號進行編碼? – ctsu 2012-03-13 12:55:43

+0

請參閱:http://stackoverflow.com/questions/444112/how-do-i-encode-uri-parameter-values – michael667 2012-03-13 13:01:11

4

您只需對網址的各個組件進行網址編碼,例如查詢字符串參數名稱/值可能包含超出ASCII範圍的字符,而不是整個網址整個

String an = URLEncoder.encode("馬賽克.jpg", "UTF-8"); 
String url = "http://www.example.com/sf?s=191ae04f&an=" + an; 
// ... 
+0

Thanx,我已經知道,拆分字符串將使它,但這種方式將強加開銷我的應用程序,所以,有沒有辦法將整個網址轉換爲utf-8而無需編碼標點符號? – ctsu 2012-03-13 12:51:55

+0

然後解析URL。首先在'?'上分割。左側是方案+域+路徑。右側是查詢字符串。查詢字符串反過來可以通過分割'&'進一步解析。每個部分都是單個參數'name = value'對。這反過來可以通過分割'='進一步解析。左側是名稱,右側是價值。現在,您可以對各個名稱和值進行網址編碼。最後只需將所有部分再次粘貼到一個新的URL中。 – BalusC 2012-03-13 13:03:11

0

Java - encode URL回答,您可以使用類似

public URL parseUrl(String s) throws Exception { 
    URL u = new URL(s); 
    return new URI(
      u.getProtocol(), 
      u.getAuthority(), 
      u.getPath(), 
      u.getQuery(), 
      u.getRef()). 
      toURL(); 
} 

的原因是,需要進行不同的編碼不同部分的URL。

唉你的情況下,應URLEncoder應用到你的查詢參數的值

-1

首先,您必須僅編碼URL的路徑組件。

以下字符是根據URI規範的URI中的預留字符。因此URLEncode將會轉義這些字符。

":"/"/"/"?"/"#"/"["/"]"/"@" 

參考:

URI Reserved Characters

+0

編號URLEncoder用於參數中的名稱 - 值對。不是路徑組件。 – EJP 2016-09-05 12:14:44

相關問題