| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Как правильно (byte[] -> String)? |
| Автор: physicist 23.7.2009, 13:48 | ||||||
| Итак, пишу я значит портлетик, который аплоадит файл на сервер. Все прекрасно, но в строковых полях формы ломается кодировка. Проблему я решил, но мне кажется, что метод которым я пользовался не true-way. Теперь подробности. Request из формы парсится с помощью http://commons.apache.org/fileupload/ и строковое поле из него берется с помощью метода:
В итоге на странице возникают кракозяблы, типа: ааа Проблему я решил с помощью следующего кода:
где item.get() возвращает массив byte[]. Вопрос: правильно ли все сделал? Можно ли сделать это как-нибудь правильнее? PS. Пишу здесь, а не в ветке j2ee, потому что вопрос имеет общий характер и решается тривиальным образом. К сожалению, я не знаю как :-( upd: Если в конструкторе принудительно не указывать кодировку:
то проблема остается. |
| Автор: Andy_L20066 24.7.2009, 13:42 |
| привет, Могу предположить что ты делаешь все правильно. new String(byte[]) использует System default encoding. Если у тебя байты твои приходят на сервер из другим типом encoding, то нужно использовать конструктор new String(byte[], сharset). Просто encoding на сервере и клиенте у тебя разные. |
| Автор: physicist 24.7.2009, 18:27 |
| Andy_L20066, вопрос в том, как установить кодировку по умолчанию, если у сервера стоит другая кодировка? Причем, предположим, что менять настройки сервера нельзя. |
| Автор: Andy_L20066 24.7.2009, 20:04 | ||
а чем тебе нравится указывать его явно? может действительно будет лучше и на клиенте и на сервере иметь один и тот же encoding, задавая его константой... ну что-то типа
Добавлено через 3 минуты и 51 секунду попробуй еще поискать ответ в самом хелпе FileUploaderа (библиотека которую ты используешь для загрузки файла) |
| Автор: olegrolik 30.7.2009, 11:03 | ||||
Я бы предложил использовать фильтр. Можно замапить фильтр на все запросы (сервлеты - "/") и указывать определённую кодировку, например cp1251. Кодировку вынести, скажем в отдельный файл (конфиг). Фильтр будет брать кодировку из конфига, и при загрузке файла тоже тянешь кодировку из конфига:
P.S. правильно ли я понял, что item - это объект класса FileItem? |
| Автор: physicist 30.7.2009, 18:14 | ||
[QUOTE=olegrolik,30.7.2009, 11:03]
Да. Кстати, спасибо за идею с фильтром. Что-то сразу до нее не догадался. |