小编典典

Android:如何解析带有URL字符串的URI对象?

java

我有一个表示包含空格的URL的字符串,并希望将其转换为URI对象。如果我只是尝试通过创建它

String myString = "http://myhost.com/media/File Name that has spaces inside.mp3";
URI myUri = new URI(myString);

它给了我

java.net.URISyntaxException: Illegal character in path at index X

其中index X是URL字符串中第一个空格的位置。

如何解析myStringURI对象?


阅读 433

收藏
2020-09-08

共1个答案

小编典典

实际上,您应该使用URI编码
“无效”字符。由于该字符串实际上包含完整的URL,因此很难对其进行URI编码。您不知道/应该考虑哪些斜杠,哪些不是。您无法String事先预测到这一点。确实需要在更高层次上解决该问题。那String是哪里来的
它是硬编码的吗?然后只需相应地自己更改即可。它作为用户输入进来吗?验证并显示错误,让用户自己解决。

无论如何,如果可以确保 是URL中的空格使其无效,那么您也可以仅使用逐个字符串替换%20

URI uri = new URI(string.replace(" ", "%20"));

或者,如果可以确保 _仅_是最后一个斜杠之后的部分需要进行URI编码,那么也可以在android.net.Uri实用工具类的帮助下进行操作:

int pos = string.lastIndexOf('/') + 1;
URI uri = new URI(string.substring(0, pos) + Uri.encode(string.substring(pos)));

请注意,这URLEncoder不适用于该任务,因为它旨在按照application/x-www-form-urlencoded规则对查询字符串参数名称/值进行编码(用于HTML表单)。

2020-09-08