我在用非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。