2014-12-02 57 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的方案部分为小写也很简单,所以很容易避免。

相关问题