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

70
7

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

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

Для меня очень важно решить эту проблему, поэтому я прошу вас, ребята, о помощи PLS (она используется только для прямых http-accessable файлов-ссылок - без веб-сайтов или других материалов).

СПАСИБО

PS: DB - utf8_general_ci, а имена файлов (соответственно отображаемые SPRCHE թ и SPRÜCHE в БД) также используются в качестве имен файлов (файл загружается из C:...\SPRCHE թ. Txt и т.д.) Отображается FTP-Viewer загруженные файлы: SPRÜCHE.txt и SPRCHEÕ ©.txt (что может быть подсказкой?) Я спрашиваю себя, почему SPRÜCHE.txt работает с CP1252, в то время как SPRCHE թ. txt использует UTF-8?

спросил(а) 2014-04-14T21:39:00+04:00 6 лет, 6 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема