Xpoint
   [напомнить пароль]

Получение значений полей в правильной кодировке при отправке Multipart формы

Метки: [без меток]
2006-10-08 14:15:44 [обр] Сергей Ворончук(0/1)[досье]
сообщение промодерировано

Закачиваю через Multipart форму файл + текстовые поля.
Использую UploadBean 1.7 - http://www.javazoom.net/jzservlets/uploadbean/uploadbean_ru.html
Слбственно закачка идет без проблем. Проблемы возникают при передачи в текстовых полях Multipart формы руских букв - вместо них получаю знаки вопроса. При рередаче обычной (не multipart) формы проблем нет.

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ page contentType="text/html; charset=Windows-1251" %> 
<%@ page language="java" import="javazoom.upload.*,java.util.*" %>

<c:set var="upl">
<% 
request.setCharacterEncoding("Windows-1251");   
MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
String name = mrequest.getParameter("name");
out.print(name);
%>
</c:set>

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head><body>
<c:out value="${upl}" escapeXml="false"/>
</body></html>

Сталкивался ли кто с этим и как бороться?

спустя 7 часов [обр] Сергей Ворончук(0/1)[досье]

Отвечаю сам себе : После
MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request);
нужно добавить строку
mrequest.DEFAULTENCODING="Windows-1251";
Жаль в документации на русском об этом ни слова.

Тема закрыта.

спустя 2 часа 21 минуту [обр] Владимир Хоменко(2/67)[досье]
Как-то некопцетуально, что ли...
спустя 8 минут [обр] Владимир Хоменко(2/67)[досье]

Собственно, что это за класс такой, не знаю, и чем он занимается, тоже не имею понятия. Однако, в документации есть конструктор

MultipartFormDataRequest(javax.servlet.http.HttpServletRequest req, java.util.Vector listeners, int maxcontentlength, java.lang.String parser, java.lang.String encoding)

через который, как я полагаю, и следует задавать кодировку.

спустя 1 час 50 минут [обр] Сергей Ворончук(0/1)[досье]
Владимир Хоменко[досье]
Я строкой
mrequest.DEFAULTENCODING="Windows-1251";
меняю дефолтовое значение параметра, которое потом используется в том же конструкторе - что тут неконцептуального?
спустя 15 минут [обр] Владимир Хоменко(2/67)[досье]

Вам надо выбрать кодировку для конкретного экземпляра класса MultipartFormDataRequest, что достигается вызовом конструктора.

При прямом присваивании static поля DEFAULTENCODING вы изменяете кодировку для всех экземпляров данного класса (равно как и для уже существующих).

Вообще, данное поле должно использоваться только для чтения, ИМХО.

спустя 1 день 14 часов [обр] Сергей Ворончук(0/1)[досье]

Владимир Хоменко[досье]
Да, я согласен в моем варианте при первом обращении после запуска сервера поле передается в дефолтной кодировке. Но попытка определить кодировку в конструкторе

MultipartFormDataRequest mrequest =
new MultipartFormDataRequest(request,java.util.Vector listeners,100,"COSPARSER","Windows-1251");

тоже успеха не имели - непонятно, что передавать в качестве java.util.Vector listeners
Syntax error on token "listeners", delete this token
Примера конструктора в документации не нашел.

спустя 1 час 30 минут [обр] Владимир Хоменко(2/67)[досье]
Думается, что так:
MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request, null, 100, "COSPARSER", "Windows-1251");
спустя 3 минуты [обр] Владимир Хоменко(2/67)[досье]
Cкорее даже так:
MultipartFormDataRequest mrequest = new MultipartFormDataRequest(request, null, MultipartFormDataRequest.MAXCONTENTLENGTHALLOWED, MultipartFormDataRequest.DEFAULTPARSER, "Windows-1251");
спустя 45 минут [обр] Сергей Ворончук(0/1)[досье]
Владимир Хоменко[досье]
Спасибо большое! Сработало!
Powered by POEM™ Engine Copyright © 2002-2005