У меня возникла проблема, когда я вызываю request.getParameter("filename")
в HttpServletRequest в GWT. Вот код, как я кодировать URL:request.getParameter() не удалось правильно закодировать URL
String sFile = URL.encodeQueryString("°^!§$%()=`´' glassfish +~#'@€-_²³.pdf");
String sURL = GWT.getModuleBaseURL() + "filehttpservice" // name of the httpservlet
+ "?filename=" + sFile; // the name of the file to download
Window.open(sURL, "_blank", sFeatures); // sFeatures are some window-settings
Так я хочу, чтобы загрузить файл с некоторыми специальными символами в имени. Имя URL-закодирован является:
%C2%B0%5E!%C2%A7%24%25()%3D%60%C2%B4'%20glassfish%20%2B~%23'%40%E2%82%AC-_%C2%B2%C2%B3.pdf
, который является правильным, потому что я могу назвать файл непосредственно в браузере с этим именем.
Так что, когда приходит запрос GET-метод из HttpServlet я хочу, чтобы извлечь имя файла из его параметров с помощью следующего кода:
request.setCharacterEncoding("UTF-8");
String sFilename = request.getParameter("filename");
Но принимаемой Имя файла:
°^!§$%()=`´' glassfish +~#'@â¬-_²³.pdf
, что совершенно неправильно.
Я долго искал и пробовал серверные решения, но ничего не меняет. Кто-нибудь знает, как я могу получить правильное имя файла?
Хорошо, но если я использую 'doPost', декодирование в любом случае потерпит неудачу. Я получаю точно такое же неправильное имя файла. Похоже, что это не имеет никакого отношения к CharacterEncoding – N43
@ N43 'URLDecoder .decode (новый String (request.getParameter (" filename "). GetBytes ( " iso-8859-1 ")), CHARSET_FOR_URL_ENCODING); подробнее здесь http://stackoverflow.com/questions/469874/how-do-i-correctly-decode-unicode-parameters-passed-to-a-servlet –
Спасибо! Теперь я правильно декодирую параметры самостоятельно, но сталкиваюсь с другой проблемой с ответом: когда я устанавливаю ответ-Header 'response.setHeader (« Content-Disposition »,« attachment; filename = \ »« + sUrlFilename + ».pdf« + », \ ""); 'где sUrlFilename является правильным UTF-8-Filename:' ° ^! § $%() = '' glassfish + ~ # '@ € -_²³', а ContentType - 'application/pdf; charset = UTF-8' Имя файла в подсказке для загрузки показывает '^! $%() = 'glassfish + ~ #' @ -_ .pdf', что также неверно. У вас есть идея, как это исправить? (Oh и 'response.setCharacterEncoding (" UTF-8 ")' также был вызван) – N43