【发布时间】:2014-10-02 14:11:05
【问题描述】:
我已经创建了一个 URL 来获取服务器上的文件。
但是,文件名可能包含特殊字符,例如:~!@#$%^&*() 或
一些亚洲字符,如日文、中文和韩文。
我已阅读this article 并采用解决方案:
String dwnStr= new String("http://") + `HOST_IP_ADDRESS` + new String('/')
+ "picture/dog.jpg";
URL url= new URL(dwnStr);
URI uri= new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef()); // According to the official doc, it's in all cases.
url= uri.toURL();
(HttpURLConnection) url.openConnection();
如果dwnStr不包含任何特殊字符,它会变得很好。相比之下,如果dwnStr包含#哈希标记,URL构造函数将删除@之后的单词987654330@,作为分片标识符。
因此,我尝试了另一种解决方案(仍然在上面的链接中。这一次,我避免使用URL:
uri = new URI("http", null, HOST_IP_ADDRESS, 80, null,URLEncoder.encode("picture/dog.jpg", "UTF-8"), null);
对于不包含任何特殊字符的文件名,它甚至不能工作。
我犯了什么错误?
我仍然可以采用什么策略?
ps: 1. 我也尝试过this article 中选择的解决方案。当然,它不起作用。
- 官方文档链接:official doc
【问题讨论】:
标签: java http url uri httpurlconnection