我在用非ascii和空格组合来编码url时遇到问题。例如,http://xxx.xx.xx.xx/resources/upload/pdf/APPLE ははは.pdf。我读到了here您只需要对url路径的最后一部分进行编码。
代码如下:

public static String getLastPathFromUrl(String url) {
    return url.replaceFirst(".*/([^/?]+).*", "$1");
}

所以现在我已经有了APPLE ははは.pdf,下一步是用%20替换空格以便链接工作,但问题是如果我对APPLE%20ははは.pdf进行编码,它就会变成APPLE%2520%E3%81%AF%E3%81%AF%E3%81%AF.pdf。我应该有APPLE%20%E3%81%AF%E3%81%AF%E3%81%AF.pdf
所以我决定:
1. Separate each word from the link
2. Encode it
3. Concatenate the new encoded words, for example:
    3.A. APPLE (APPLE)
    3.B. %E3%81%AF%E3%81%AF%E3%81%AF.pdf (ははは.pdf)
    with the (space) converted to %20, now becomes APPLE%20%E3%81%AF%E3%81%AF%E3%81%AF.pdf

这是我的代码:
public static String[] splitWords(String sentence) {
    String[] words = sentence.split(" ");
    return words;
}

呼叫代码:
String urlLastPath = getLastPathFromUrl(pdfUrl);
String[] splitWords = splitWords(urlLastPath);
for (String word : splitWords) {
    String urlEncoded = URLEncoder.encode(word, "utf-8"); //STUCKED HERE
}

现在我想把索引中的每个单独字符串(urlEncoded)连接起来,最终形成类似于APPLE%20%E3%81%AF%E3%81%AF%E3%81%AF.pdf的形式。我该怎么做?

最佳答案

实际上%20被编码为%2520,所以只需调用urlencoder.encode(word,“utf-8”);这样您将得到类似于apple+%e3%81%af%e3%81%af%e3%81%af.pdf的结果,并在最终结果中将+替换为%20。

10-08 18:39