我有一个表示包含空格的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字符串中第一个空格的位置。
X
如何解析myString为URI对象?
myString
URI
实际上,您应该使用URI编码 “无效”字符。由于该字符串实际上包含完整的URL,因此很难对其进行URI编码。您不知道/应该考虑哪些斜杠,哪些不是。您无法String事先预测到这一点。确实需要在更高层次上解决该问题。那String是哪里来的 它是硬编码的吗?然后只需相应地自己更改即可。它作为用户输入进来吗?验证并显示错误,让用户自己解决。
/
String
无论如何,如果可以确保 仅 是URL中的空格使其无效,那么您也可以仅使用逐个字符串替换%20:
%20
URI uri = new URI(string.replace(" ", "%20"));
或者,如果可以确保 _仅_是最后一个斜杠之后的部分需要进行URI编码,那么也可以在android.net.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表单)。
URLEncoder
application/x-www-form-urlencoded