| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > JSF проблема с кодировкой |
| Автор: vzf 16.6.2007, 14:55 | ||
| Здравствуйте. Пишу приложение на JSF. Возникла проблема с кодировкой.
Значение link.addressForSetup тащится из базы данных и представляют собой ссылку на файл. В ссылке есть как английские так и русские символы. Проблема заключается в том, что при отрисовки страницы. Титл ссылки (alt) отображается нормальн и русские символы и английсские, но в значение самой ссылке (href) русские символы отображаются как %251E%2511%2529%2518%2515/6.%252 и поэтому сама ссылка получается неправильной, т.е. при нажатии на нее браузер не может окрыть файл. Как исправить эту проблему и в чем тут дело? Это мой косяк или бага JSF? |
| Автор: Stampede 16.6.2007, 16:23 |
| vzf, никакого косяка нет, все по спеку Просто стандартом HTTP предусмотрено определенное множество символов, которые могут присутствовать в URL, и русские буквы, к сожалению, в это множество не попадают. Те символы, которые не входят в число базовых, передаются двоичными кодами. Какими именно - зависит от испольуемой кодировки. Консорциум W3C сильно советует использовать UTF-8 (похоже, в приведенном тобой примере строка закодирована именно в ней). Для того чтобы программисту самому не страдать с закодированием/раскодированием УРЛов, в Java предусмотрены два класса-утилиты, URLEncoder и URLDecoder, у которых есть соответствующие статические методы encode(String url, String encoding) и decode(String url, String encoding). Вот их как раз и надо использовать для преобразования одного в другое. Вот описания этих классов:
Если файлы, о которых ты говоришь, выдаются напрямую дефолтным сервлетом, то значит надо подменить его своим собственным, который будет правильно раскодировать имена файлов с русскими буквами. Успехов! |
| Автор: vzf 29.6.2007, 14:14 | ||||||||
| Спасибо за разъяснение. С обычными html ссылками у меня получилось, а вот с сылками на локальные ресурсы проблемы. Вот написал простенькую страницу JSF и бин к ней для демонстрации проблемы. Бин.
Страница
После перекодировки получаю.
На странице получается ссылка
Но это ладно, самое обидное что даже если в браузере вручную вбить %5C%5Chost531%5C%D0%9A%D0%BD%D0%B8%D0%B3%D0%B8 Ресурс не откроется :( |