首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.net.MalformedURLException:基于使用URLEncoder修改的字符串的URL上没有协议

java.net.MalformedURLException:基于使用URLEncoder修改的字符串的URL上没有协议
EN

Stack Overflow用户
提问于 2014-02-28 19:26:06
回答 2查看 276K关注 0票数 38

所以我尝试在URL中使用这个字符串:-

代码语言:javascript
复制
http://site-test.com/Meetings/IC/DownloadDocument?meetingId=c21c905c-8359-4bd6-b864-844709e05754&itemId=a4b724d1-282e-4b36-9d16-d619a807ba67&file=\\s604132shvw140\Test-Documents\c21c905c-8359-4bd6-b864-844709e05754_attachments\7e89c3cb-ce53-4a04-a9ee-1a584e157987\myDoc.pdf

在这段代码中:

代码语言:javascript
复制
String fileToDownloadLocation = //The above string
URL fileToDownload = new URL(fileToDownloadLocation);
HttpGet httpget = new HttpGet(fileToDownload.toURI());

但在这一点上我得到了错误:-

代码语言:javascript
复制
java.net.URISyntaxException: Illegal character in query at index 169:Blahblahblah

我用谷歌搜索了一下,意识到这是由于URL中的字符(猜测&),所以我添加了一些代码,所以现在看起来是这样的:-

代码语言:javascript
复制
String fileToDownloadLocation = //The above string
fileToDownloadLocation = URLEncoder.encode(fileToDownloadLocation, "UTF-8");
URL fileToDownload = new URL(fileToDownloadLocation);
HttpGet httpget = new HttpGet(fileToDownload.toURI());

但是,当我尝试运行此命令时,当我尝试创建URL时出现错误,然后该错误显示为:-

代码语言:javascript
复制
java.net.MalformedURLException: no protocol: http%3A%2F%2Fsite-test.testsite.com%2FMeetings%2FIC%2FDownloadDocument%3FmeetingId%3Dc21c905c-8359-4bd6-b864-844709e05754%26itemId%3Da4b724d1-282e-4b36-9d16-d619a807ba67%26file%3D%5C%5Cs604132shvw140%5CTest-Documents%5Cc21c905c-8359-4bd6-b864-844709e05754_attachments%5C7e89c3cb-ce53-4a04-a9ee-1a584e157987%myDoc.pdf

看起来我不能进行编码,直到我创建了URL,否则它会替换斜杠和其他不应该的东西,但是我不知道如何用字符串创建URL,然后格式化它,使其适合使用。我对所有这些都不是特别熟悉,希望有人能指出我在将字符串A放入适当格式的URL中,然后使用正确的字符替换时遗漏了什么?

非常感谢您的任何建议!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-28 20:10:24

在将参数值连接到URL之前,需要对参数值进行编码。

反斜杠\是必须转义为%5C的特殊字符

转义示例:

代码语言:javascript
复制
String paramValue = "param\\with\\backslash";
String yourURLStr = "http://host.com?param=" + java.net.URLEncoder.encode(paramValue, "UTF-8");
java.net.URL url = new java.net.URL(yourURLStr);

结果是http://host.com?param=param%5Cwith%5Cbackslash,它是格式正确的url字符串。

票数 29
EN

Stack Overflow用户

发布于 2021-10-28 15:08:44

非常简单的修复

String encodedURL = UriUtils.encodePath(request.getUrl(),"UTF-8");

不需要额外的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22093864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档