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

时间:2014-04-14 18:39:21

标签: 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片段作为“特殊字符”,而第二个需要两个(%XX%XX)它们。

目前我正在用这个函数编码链接,但是当它与一个文件一起工作时,另一个不起作用(取决于我选择的编码)

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;
    }

java世界中是否有一体化的url-safe编码函数?

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

谢谢你

PS:数据库是utf8_general_ci,文件名(在数据库中正确显示为SPRCHEթ和SPRÜCHE)也用作文件名(文件从C上传:... \ SPRCHEթ.txt等) FTP-Viewer将上传的文件显示为:SPRÜCHE.txt和SPRCHEÕ©.txt(这可能是一个提示?) 我问自己,为什么SPRÜCHE.txt适用于CP1252而SPRCHEթ.txt使用UTF-8?

0 个答案:

没有答案