URI encode與URL encode對空格的不同處理

來源:互聯網
上載者:User

        在各種開放平台、OpenAPI越來越多之時,用戶端軟體或多或少的在通過HTTP、HTTPS協議與伺服器互動。這其中一個常見的情況就是要求對URL進行encode處理,以保證中文、特殊字元的正確傳遞。不過這個小小的encode也沒想象中的那麼單純。

        前幾日在Android開發中遇到一例時,URL中的空格符(ASCII碼是0x20),在經過java.net.URLEncoder類encode以後,會變成+號,而不是%20,從而造成了server不能正確識別。

        經查,URLEncode有兩個方法:

public static String encode (String s,String charsetName)
Encodes s using the Charset named bycharsetName.

 

public static String encode (String s)

Equivalent to encode(s, "UTF-8").

 

        第二個方法已經從Android API 1起就被棄用了,建議使用第一種方法顯示的指定字元集為UTF-8,並且該編碼是將空格符編碼為+,而不是%20。當然,這是符合URL規範的,見RFC-1738。

 

        要想將空格符編碼為%20,就要用另一種encode,即android.net.Uri類,該類使用RFC-2396標準。文法如下:

public static String encode (String s)

Encodes characters in the given string as'%'-escaped octets using the UTF-8 scheme. Leaves letters ("A-Z","a-z"), numbers ("0-9"), and unreserved characters("_-!.~'()*") intact. Encodes all other characters.

 

        當進行網路相關的介面實現時,還是要認真瞭解具體的區別,同時也建議開放平台的文檔中能盡量清晰的描述協議約定,以免給開發和調試帶來困難。試想,如果不是恰巧發現了這個問題,得經過多少測試才能發現這個bug呢?

        至於URL與URI的區別,參見百度百科吧。

——歡迎轉載,請註明出處 http://blog.csdn.net/caowenbin ——

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.