【问题标题】:How can I encode special character by URI correctly?如何通过 URI 正确编码特殊字符?
【发布时间】: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 中选择的解决方案。当然,它不起作用。

  1. 官方文档链接:official doc

【问题讨论】:

    标签: java http url uri httpurlconnection


    【解决方案1】:

    您需要调用toASCIIString() 方法。它返回一个String,您可以将其发送到远程服务器。

    另一种选择是使用IDN 类的静态方法toASCII

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多