Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно (byte[] -> String)? Проблема с кодировкой в multipart/form-d 
:(
    Опции темы
physicist
  Дата 23.7.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.7.2009

Репутация: нет
Всего: нет



Итак, пишу я значит портлетик, который аплоадит файл на сервер. Все прекрасно, но в строковых полях формы ломается кодировка. Проблему я решил, но мне кажется, что метод которым я пользовался не true-way.

Теперь подробности. Request из формы парсится с помощью FileUpload и строковое поле из него берется с помощью метода:
Код

item.getString()


В итоге на странице возникают кракозяблы, типа: ааа Проблему я решил с помощью следующего кода:
Код

new String(item.get(),"utf8")

где item.get() возвращает массив byte[].

Вопрос: правильно ли все сделал? Можно ли сделать это как-нибудь правильнее?

PS. Пишу здесь, а не в ветке j2ee, потому что вопрос имеет общий характер и решается тривиальным образом. К сожалению, я не знаю как :-(

upd: Если в конструкторе принудительно не указывать кодировку:
Код

new String(item.get())

то проблема остается.

Это сообщение отредактировал(а) physicist - 23.7.2009, 13:56
PM MAIL   Вверх
Andy_L20066
Дата 24.7.2009, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 10.3.2008

Репутация: нет
Всего: 1



привет, 

Могу предположить что ты делаешь все правильно. new String(byte[]) использует System default encoding. Если у тебя байты твои приходят на сервер из другим типом encoding, то нужно использовать конструктор new String(byte[], сharset). Просто encoding на сервере и клиенте у тебя разные.
PM MAIL ICQ   Вверх
physicist
Дата 24.7.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.7.2009

Репутация: нет
Всего: нет



Andy_L20066, вопрос в том, как установить кодировку по умолчанию, если у сервера стоит другая кодировка? Причем, предположим, что менять настройки сервера нельзя.
PM MAIL   Вверх
Andy_L20066
Дата 24.7.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 10.3.2008

Репутация: нет
Всего: 1



а чем тебе нравится указывать его явно? может действительно будет лучше и на клиенте и на сервере иметь один и тот же encoding, задавая его константой... ну что-то типа 
Код

 System.setProperty("file.encoding", "UTF-8");


Добавлено через 3 минуты и 51 секунду
попробуй еще поискать ответ в самом хелпе FileUploaderа (библиотека которую ты используешь для загрузки файла)
PM MAIL ICQ   Вверх
olegrolik
Дата 30.7.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 25.1.2006

Репутация: нет
Всего: нет



Цитата(physicist @ 24.7.2009,  18:27)
Andy_L20066, вопрос в том, как установить кодировку по умолчанию, если у сервера стоит другая кодировка? Причем, предположим, что менять настройки сервера нельзя.

Я бы предложил использовать фильтр. 
Можно замапить фильтр на все запросы (сервлеты - "/") и указывать определённую кодировку, например cp1251.
Кодировку вынести, скажем в отдельный файл (конфиг).
Фильтр будет брать кодировку из конфига, и при загрузке файла тоже тянешь кодировку из конфига: 
Код

String encoding = ... // read from config
item.getString(encoding);


P.S. правильно ли я понял, что item - это объект класса FileItem? smile
PM MAIL   Вверх
physicist
Дата 30.7.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 8.7.2009

Репутация: нет
Всего: нет



[QUOTE=olegrolik,30.7.2009,  11:03]
Цитата(physicist @ 24.7.2009,  18:27)

P.S. правильно ли я понял, что item - это объект класса FileItem? smile

Да. Кстати, спасибо за идею с фильтром. Что-то сразу до нее не догадался.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.