Как (url-)кодировать имена файлов, содержащие специальные символы UTF-8 или CP1252

У меня есть сервер, на котором размещено много файлов (например, также файлы, имена которых содержат специальные символы, такие как «Ü» и «թ»)

теперь я столкнулся с большой проблемой, потому что я не могу создать правильные 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-адресов?

Для меня очень важно решить эту проблему, поэтому я прошу вас, ребята, о помощи, пожалуйста (используется только для прямых 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?


person Niko    schedule 14.04.2014    source источник
comment
Как имена файлов кодируются на сервере?   -  person tripleee    schedule 14.04.2014
comment
ftp-просмотрщик показывает мне: SPRÜCHE.txt и SPRCHEÕ©.txt. кстати. Я загружаю их, говоря ftp использовать UTF-8...   -  person Niko    schedule 14.04.2014
comment
Тогда я даже не вижу, что очень сложно, кроме того, что вы мысленно смешиваете устаревшие кодовые страницы Windows с Unicode.   -  person tripleee    schedule 14.04.2014
comment
дело в том, что моя БД сохраняет ссылки в правильной кодировке UTF-8 (SPRÜCHE и SPRCHEթ). Как мне теперь понять, как они сохраняются на файловом сервере? мне нужно угадать, какую кодировку использовать, или есть какое-то правило? как уже упоминалось, вышеприведенная функция работает только для одного из имен файлов, а не для обоих...   -  person Niko    schedule 14.04.2014
comment
Похоже, что один из них ошибся в БД.   -  person tripleee    schedule 14.04.2014
comment
база данных и файловый сервер в порядке, я думаю? значения сохраняются корректно и файлы загружаются с теми же именами, что и в БД (только ftp-просмотрщик отображает թ в виде двух символов). а также «Ü» - это символ UTF-8, как «թ» ... так как я могу определить, какой набор символов нужно найти на сервере (в чем заключается мой первоначальный вопрос)   -  person Niko    schedule 15.04.2014
comment
Ü не является %DC, правильная кодировка UTF-8 — %C3% 9С.   -  person tripleee    schedule 15.04.2014
comment
это правда, но когда я использую %C3%9C, я получаю 404. когда я использую CP-версию (%DC), он находит файл... можете ли вы сказать мне, что я делаю неправильно?   -  person Niko    schedule 15.04.2014
comment
Что вы используете для обслуживания ваших файлов? Апач HTTPd?   -  person Alastair McCormack    schedule 15.04.2014
comment
Привет, ничего особенного; Я просто загружаю их прямо с веб-сервера (apache). подозрительно то, что оба файла находятся в одной папке, но для одного нужна другая кодировка, чем для другого... Мне нужно что-то сказать FTPClient для загрузки SPRÜCHE также в стиле UTF-8 (например, SPRÕ©CHE)   -  person Niko    schedule 15.04.2014