网址连接的网址编码问题

时间:2014-03-01 10:53:38

标签: java android url encoding utf-8

请帮我编码网址:

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不分开路径参数和查询参数来单独编码。

请帮助我。

3 个答案:

答案 0 :(得分:1)

问题是你要对整个网址进行编码,你只需要对文件名进行编码,例如

String filename = Uri.encode("10 رسم الصباح - 1.mp3");
String url = "http://dsxsd.com/def/fss/default/files/" + filename;

答案 1 :(得分:1)

使用URI templatesURLEncoder.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"));
}