无法使用“发布到URL”;java.lang.IllegalArgumentException:路径中的非法字符;
这是我的网址无法使用“发布到URL”;java.lang.IllegalArgumentException:路径中的非法字符;,java,android,url,Java,Android,Url,这是我的网址 String serverUrl = http://mob.krill.order-line.co.uk/MobileService.svc/UploadFile/721/Universal Image Loader @#&=+-_.,!()~'%20.png 这里是universalimageloader@#&=+-。,!()~'%20.png只是动态指定给字符串的文件名 HttpPost httpPost = new HttpPost(serverUrl); 我得到
String serverUrl = http://mob.krill.order-line.co.uk/MobileService.svc/UploadFile/721/Universal Image Loader @#&=+-_.,!()~'%20.png
这里是universalimageloader@#&=+-。,!()~'%20.png
只是动态指定给字符串的文件名
HttpPost httpPost = new HttpPost(serverUrl);
我得到:
java.lang.IllegalArgumentException:索引76处路径中的非法字符:http://mob.krill.order-line.co.uk/MobileService.svc/UploadFile/721/Universal 图像加载器@#&=+-\。,!()~'%20.png
补救措施是什么?您应该对字符串进行URL编码
String encoded = URLEncoder.encode (
"http://mob.krill.order-line.co.uk/MobileService.svc/UploadFile/721/Universal Image Loader @#&=+-_.,!()~'%20.png",
"UTF-8");
HttpPost httpPost = new HttpPost(encoded);
编辑,正如Duncan正确评论的那样,如果您的URL包含一个查询字符串,其中包含字符
?
和&
,则您不希望对这些字符进行URL编码。您只能对包含问题字符的字符串进行编码。您应该对字符串进行URL编码
String encoded = URLEncoder.encode (
"http://mob.krill.order-line.co.uk/MobileService.svc/UploadFile/721/Universal Image Loader @#&=+-_.,!()~'%20.png",
"UTF-8");
HttpPost httpPost = new HttpPost(encoded);
编辑,正如Duncan正确评论的那样,如果您的URL包含一个查询字符串,其中包含字符
?
和&
,则您不希望对这些字符进行URL编码。您只能对包含有问题字符的字符串进行编码。根据上述建议,我的代码使用了以下解决方案
String fileName = f.getName();
try {
fileName = URLEncoder.encode(fileName,"UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String serverUrl = http://mob.krill.order-line.co.uk/MobileService.svc/UploadFile/721/+fileName;
根据以上建议,我的代码使用以下解决方案
String fileName = f.getName();
try {
fileName = URLEncoder.encode(fileName,"UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String serverUrl = http://mob.krill.order-line.co.uk/MobileService.svc/UploadFile/721/+fileName;
大多数情况下,编码应该只在URL的“不可靠”部分进行。在这种情况下,您的方法会起作用,但如果在适当的时候使用查询字符串,则不会起作用。最好拆分URL,只标识
universalimageloader@#&=+-。,!()~'%20.png
部分。@邓肯谢谢你的评论@邓肯:谢谢你的建议!通过您的评论找到解决方案!大多数情况下,编码应该只在URL的“不可靠”部分进行。在这种情况下,您的方法会起作用,但如果在适当的时候使用查询字符串,则不会起作用。最好拆分URL,只标识universalimageloader@#&=+-。,!()~'%20.png
部分。@邓肯谢谢你的评论@邓肯:谢谢你的建议!通过您的评论找到解决方案!请参阅:。使用转义序列请参阅:。使用转义序列