Java 如何(url-)编码包含特殊UTF-8或CP1252字符的文件名
我有一个服务器,它承载许多文件(例如,还有文件,其中文件名包含特殊字符,如“Ü”和“թ”) 现在我面临一个大问题,因为我无法创建正确的URL,因为我必须以浏览器能够理解的形式对特殊字符进行编码(例如%XX):Java 如何(url-)编码包含特殊UTF-8或CP1252字符的文件名,java,url,encoding,utf-8,url-encoding,Java,Url,Encoding,Utf 8,Url Encoding,我有一个服务器,它承载许多文件(例如,还有文件,其中文件名包含特殊字符,如“Ü”和“թ”) 现在我面临一个大问题,因为我无法创建正确的URL,因为我必须以浏览器能够理解的形式对特殊字符进行编码(例如%XX): www../../SPRÜCHE.txt-->需要编码为“SPR%DCCHE.txt”以 被发现(否则404) www../../SPRCHEթ.txt-->需要编码为“SPRCHE%D5%A9.txt”以 被发现(否则404) 如您所见,第一个需要一个%XX片段作为“特殊字符”,而第
- www../../SPRÜCHE.txt-->需要编码为“SPR%DCCHE.txt”以 被发现(否则404)
- www../../SPRCHEթ.txt-->需要编码为“SPRCHE%D5%A9.txt”以 被发现(否则404)
我问自己,为什么SPRÜCHE.txt与CP1252一起工作,而SPRCHEթ.txt使用UTF-8?服务器上的文件名是如何编码的?ftp查看器显示:SPRÜCHE.txt和SPRCHEࡗ.txt。顺便说一句,我通过告诉ftp使用UTF-8上传它们……然后我甚至不知道什么是很难的,除了你在心里把旧的Windows代码页与Unicode混合在一起。问题是我的DB正确地保存了UTF-8编码的链接(SPRÜCHE和SPRCHEթ)。我现在如何知道它们是如何保存在文件服务器上的?我必须猜测使用哪种编码还是有某种“规则”?如前所述,上述函数仅适用于其中一个文件名,而不适用于两个文件名…看起来其中一个文件名在数据库中是错误的。
public static String encodeURIComponent(String filename) {
String result;
try {
// result = URLEncoder.encode(filename, "CP1252") //works only for SPRÜCHE
result = URLEncoder.encode(filename, "UTF-8") // works only for SPRCHEթ
.replaceAll("\\+", "%20").replaceAll("\\%21", "!")
.replaceAll("\\%27", "'").replaceAll("\\%28", "(")
.replaceAll("\\%29", ")").replaceAll("\\%7E", "~");
} catch (UnsupportedEncodingException e) {
result = filename;
}
return result;
}