2014-12-02 26 views
0

我使用的代碼發起的意圖:啓動瀏覽器,網址與模式「HTTP」(大寫)錯誤

startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); 

爲什麼如果URL以「http」是有效的啓動,但如果網址以「 HTTP「(大寫)它會引發ActivityNotFoundException?這很奇怪,因爲url遵循標準RFC 2396.

+0

RFC 2396,節。 3.1表示「方案名稱由一系列以 小寫字母開始的字符組成,後面跟着小寫字母 字母,數字,加號(」+「),句號(」。「)或連字符(」 - 「 「)。對於 彈性,解釋URI的程序應將大寫字母 視爲等效於方案名稱中的小寫字母(例如,允許」HTTP「爲 以及」http「)。 (即大寫的「HTTP」是不正確的,雖然它*應該*被平等對待,它不必)。 – haraldK 2014-12-02 14:14:28

+1

@haraldK:你應該發佈這個答案。 – Carnal 2014-12-02 14:20:34

回答

2

RFC 2396,sec。 3.1說:

計劃名稱由以小寫字母開頭的字符序列的繼之以小寫字母,數字的組合,加號(「+」),期限(「」),或連字符(「 - 」)。爲了提高永續性,解釋URI的程序應將大寫字母視爲與方案名稱中的小寫字母等效(例如,允許「HTTP」以及「http」)。

I.e.大寫「HTTP」根據規範不正確。雖然程序應該將大寫字母視爲等同於小寫字母,但它不必。

確保URI的方案部分爲小寫也很簡單,所以很容易避免。