Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何(url-)编码包含特殊UTF-8或CP1252字符的文件名_Java_Url_Encoding_Utf 8_Url Encoding - Fatal编程技术网

Java 如何(url-)编码包含特殊UTF-8或CP1252字符的文件名

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片段作为“特殊字符”,而第

我有一个服务器,它承载许多文件(例如,还有文件,其中文件名包含特殊字符,如“Ü”和“թ”)

现在我面临一个大问题,因为我无法创建正确的URL,因为我必须以浏览器能够理解的形式对特殊字符进行编码(例如%XX):

  • www../../SPRÜCHE.txt-->需要编码为“SPR%DCCHE.txt”以 被发现(否则404)
  • www../../SPRCHEթ.txt-->需要编码为“SPRCHE%D5%A9.txt”以 被发现(否则404)
如您所见,第一个需要一个%XX片段作为“特殊字符”,而第二个需要两个(%XX%XX)

目前,我正在使用此函数对链接进行编码,但当它使用一个文件时,另一个文件不起作用(取决于我选择的编码)

在java世界中是否有一个一体化的url安全编码功能?

解决这个问题对我来说非常重要,所以我请你们帮忙(它只用于直接的http可访问文件链接,没有网站或其他东西)

多谢各位

PS:DB是utf8_general_ci,文件名(在DB中正确显示的SPRCHEթ和SPRÜCHE)也用作文件名(文件从C:…\SPRCHEթ.txt等上传) FTP查看器会将上传的文件显示为:SPRÜCHE.txt和SPRCHEÕ™.txt(这可能是一个提示?)
我问自己,为什么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;
    }