请帮我编码网址:
http://dsxsd.com/def/fss/default/files/10 رسم الصباح - 1.mp3
我需要在Android应用中下载此文件。 当我试图建立网址时,它给了我404.但是在浏览器上网址正在运行。 当我粘贴浏览器编码的url工作正常。
但我不能硬着头脑,因为我的网址来自服务器。
我尝试使用Urlencoder.encode进行编码(url,“UTF-8”); 但服务器调用给了我错误的网址我得到“java.net.MalformedURLException:未找到协议:http%3A%2F%........
让这个url不分开路径参数和查询参数来单独编码。
请帮助我。
答案 0 :(得分:1)
问题是你要对整个网址进行编码,你只需要对文件名进行编码,例如
String filename = Uri.encode("10 رسم الصباح - 1.mp3");
String url = "http://dsxsd.com/def/fss/default/files/" + filename;
答案 1 :(得分:1)
使用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
答案 2 :(得分:0)
如果只有URL,请使用此方法
private String encodeUrl(String link) throws UnsupportedEncodingException {
Uri uri = (Uri.parse(link));
String result = null;
if (Objects.equals(uri.getScheme(), "content")) {
try (Cursor cursor = getContentResolver().query(uri, null, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
}
}
if (result == null) {
result = uri.getPath();
int cut = Objects.requireNonNull(result).lastIndexOf('/');
if (cut != -1) {
result = result.substring(cut + 1);
}
}
return link.replace(result
,URLEncoder.encode(result, "UTF-8")
.replace("+", "%20"));
}