java - url 连接的 url 编码问题

标签 java android url encoding utf-8

请帮我对网址进行编码:

http://dsxsd.com/def/fss/default/files/10 رسم الصباح - 1.mp3

我需要在 Android 应用程序中下载此文件。 当我尝试建立 url 连接时,它给了我 404。但在浏览器上,url 正在工作。 当我粘贴浏览器编码的网址时,它工作正常。

但是我不能硬核这些东西,因为我有这样的网址来自服务器。

我尝试使用 Urlencoder.encode(url,"UTF-8"); 进行编码 但服务器调用给了我错误的网址,我收到“java.net.MalformedURLException:未找到协议(protocol):http%3A%2F%........

此网址不单独编码路径参数和查询参数。

请帮助我。

最佳答案

使用URI templates : URLEncoder.encode() 不起作用。

上述库的用法:

final URITemplate template = new URITemplate("http://dsxsd.com/def/" +
    "fss/default/files/{filename}");

final VariableMap vars = VariableMap.newBuilder()
    .addScalarValue("filename", "10 رسم الصباح - 1.mp3")
    .freeze();

System.out.println(template.toString(vars));

输出:

http://dsxsd.com/def/fss/default/files/10%20%D8%B1%D8%B3%D9%85%20%D8%A7%D9%84%D8%B5%D8%A8%D8%A7%D8%AD%20-%201.mp3

关于java - url 连接的 url 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22113385/

相关文章:

java.net.MalformedURLException : Protocol not found. 原因?

java - Java 中的 Firebase Query.startAt(ServerValue.TIMESTAMP)

java - 无法对基本类型 int 调用 getUsers(String)

java - BufferedInputStream 被读取到最后,但是 "discards?"数据

java - Cassandra 触发器

安卓5.0( Lollipop ): Material Style Not Being Applied

android - 模拟器不在按钮上显示图像单击android

javascript - 如何从嵌套对象生成查询字符串

c# - 如何读取 ASP.NET 原始 URL 的查询字符串参数?

java - 如何使用 Android 手动发送 NdefMessage?