有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中忽略对url中某些字符的编码?

我有一个如下的url:https://123.com/screen-shot-2021-02-25-at-7.31.10%2520PM.png

screen-shot-2021-02-25-at-7.31.10%2520PM.png是文件名,%25是%的编码值

这给了我一个404。我需要%不被编码。在使用Google的UrlEscapers.urlFragmentEscaper().escape();for Java编码url时,除了使用replace()方法外,还有什么正确的方法可以忽略这一点

编码代码:

private static String FILENAME_REGEX = ".*//?(.*)$";
private static Pattern FILENAME_PATTERN = Pattern.compile(FILENAME_REGEX);

public String sanitizedURL(@NonNull String url) throws URISyntaxException {
    String contentUrl = url;
    Matcher matcher = FILENAME_PATTERN.matcher(url);
    if (matcher.matches()) {
        String filename = matcher.group(1);
        String encodedFilename = UrlEscapers.urlFragmentEscaper().escape(filename);
        contentUrl = url.replace(filename, encodedFilename);
        //contentUrl = contentUrl.replace("%25", "%");
    }

    // validate this is a good URI
    URI uri = new URI(contentUrl);
    return uri.toString();
}

共 (1) 个答案

  1. # 1 楼答案

    试试UrlDecoder.decode(String s, String enc)

    例如

    jshell> URLDecoder.decode("https://123.com/screen-shot-2021-02-25-at-7.31.10%2520PM.png", "UTF-8")
    $1 ==> "https://123.com/screen-shot-2021-02-25-at-7.31.10%20PM.png"