Проблема:
При обработке загружаемых на сервер файлов с помощью org.apache.commons.fileupload бьется кодировка имен файлов, получаемых вызовом FileItem.getName(). Заголовки запроса кодируются UTF8.
Причина:
Кодировка, используемая org.apache.commons.fileupload при чтении заголовков запроса - это не UTF8, а, по-видимому, системная кодировка (в случае Windows - cp1251). Т.к. имена файлов передаются именно через заголовки (а именно, "Content-Disposition"), то неверное определение кодировки заголовка приводит к ломающейся кодировке имен файлов.
Решение:
Задать явно кодировку ServletFileUpload объекта вызовом метода setHeaderEncoding() перед парсингом запроса методом parseRequest():
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF8");
Комментариев нет:
Отправить комментарий