我创建了一个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
1}}构造函数会删除#
之后的单词,将其作为片段标识符。
因此,我尝试了另一种解决方案(仍然在上面的链接中。这一次,我避免使用URL
:
uri = new URI("http", null, HOST_IP_ADDRESS, 80, null,URLEncoder.encode("picture/dog.jpg", "UTF-8"), null);
它甚至无法处理不包含任何特殊字符的文件名。
我犯了什么错误?
我还能采用什么策略?
ps:1。我也在this article尝试了所选择的解决方案。当然,它没有用。
答案 0 :(得分:0)
您需要调用toASCIIString()
方法。它返回一个String
,您可以将其发送到远程服务器。
另一种选择是使用IDN
类的静态方法toASCII
。