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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP проблема с кодировкой 
:(
    Опции темы
4epT
Дата 15.12.2011, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте! Имеется jsp:

Код

            <% 
                String category = request.getParameter("category");
            %>
            
            <table>
                <tr>
                    <td>
                        <div class='title' style='padding-left: 50px; padding-bottom: 10px;'>Изменить</div>
                        <form action="ecategory.htm" method="post">
                            <input type="hidden" value='<%= request.getParameter("id") %>' name="id" />
                            <input type="text" class="span5" value='<%= category %>' name="newCategoryName" />
                            <input type="submit" class="btn success" value="Сохранить" />
                            <a href="category.jsp" class="btn danger">Отмена</a>
                        </form>
                    </td>
                </tr>
            </table>


Сюда уже category приходит в неправильной кодировке (не видны русские буквы). 

Данный параметр приходит с другой jsp (которая была сгенерирована сервлетом)

Сервлет вот такой:

Код

                writer.append("<tr>");
                    writer.append("<td>");
                        writer.append("<b>" + list.getString("category") + "</b>");
                    writer.append("</td>");
                    writer.append("<td>");
                        writer.append("<a class='btn primary small' href='categoryEdit.jsp?id=" + list.getInt("id") +
 "&category=" + list.getString("category") + "'>Редактировать</a>");
                    writer.append("</td>");
                    writer.append("<td style='width:100%;'>");
                        writer.append("<a class='btn danger small' href='dcategory.htm?id=" + list.getInt("id") + "'>Удалить</a>");
                    writer.append("</td>");
                writer.append("</tr>");


На самой jsp, в сревлете, в строке параметров все отображается нормально.

был добавлен фильтр:

Код

public class CharsetFilter implements Filter {
  // кодировка
  private String encoding;

  public void init(FilterConfig config) throws ServletException {
    // читаем из конфигурации
    encoding = config.getInitParameter("requestEncoding");

    // если не установлена - устанавливаем Cp1251
    if (encoding == null)
      encoding = "UTF-8";
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
      throws IOException, ServletException {
    request.setCharacterEncoding(encoding);
    next.doFilter(request, response);
  }

  public void destroy() {
  }
}


Пытался везде придерживаться единой кодировки, а именно UTF-8.

Поиск юзал, не один из найденных методов не помог (

Это сообщение отредактировал(а) 4epT - 15.12.2011, 19:02
PM MAIL   Вверх
dobrolub
Дата 15.12.2011, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Проверь, стоит ли в jsp таг с contentType@charset

Код

<%@ page contentType="text/html; charset=utf-8" %>


PM   Вверх
4epT
Дата 15.12.2011, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Стоит вот такое:

Код

<%@page contentType="text/html" pageEncoding="UTF-8"%>


PM MAIL   Вверх
Vasay
Дата 15.12.2011, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



4epT, 

Томкэт?

Если да - он настроен на передачу гет параметров в UTF8 ?

Цитата

Edit conf/server.xml and find the line where the Coyote HTTP Connector is defined. It will look something like this, possibly with more parameters: <Connector port="8090"/>

Add a URIEncoding="UTF-8" property to the connector: <Connector port="8090" URIEncoding="UTF-8"/>

Restart Tomcat



--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
4epT
Дата 15.12.2011, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Стоит вот такое:

Код

<%@page contentType="text/html" pageEncoding="UTF-8"%>


Решил прооблему путем добавления в server.xml (в коннектор) строки:

Код

URIEncoding="UTF-8"


Если кто то может объяснить именно причину всего этого, буду благодарен )
PM MAIL   Вверх
Vasay
Дата 15.12.2011, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



Цитата(4epT @  15.12.2011,  22:10 Найти цитируемый пост)
Если кто то может объяснить именно причину всего этого, буду благодарен )



По умолчанию TomCat считает что GET параметры  передаются кодировкой, отличной от UTF8 (не помню, какой именно). А Вы пытаетесь передать UTF8 строку.

Цитата

 writer.append("<a class='btn primary small' href='categoryEdit.jsp?id=" + list.getInt("id") +
 "&category=" + list.getString("category") + "'>Редактировать</a>");


Кстати, перед передачей строку нужно URL кодировать, а то могут возникнуть казусы, если в строке окажутся спецсимволы

почитайте про URLEncoder и URLDecoder


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
dobrolub
Дата 15.12.2011, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



URI encoding не очень хорошо стандартизирован, когда дело касается национальных чарсетов. Это можно обойти с помощью установления параметра на <form

Код

<form enctype="multipart/form-data" method="POST"


В этом случае каждый параметер на сервер придёт с аттрибутом charset и будет раскодирован правильно, и    
URIEncoding="UTF-8" можно будет убрать. 

Это сообщение отредактировал(а) dobrolub - 15.12.2011, 22:38
PM   Вверх
Vasay
Дата 15.12.2011, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

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



dobrolub, 
Цитата(dobrolub @  15.12.2011,  22:36 Найти цитируемый пост)
URIEncoding="UTF-8" можно будет убрать. 


Нет, его нельзя будет убрать, если форма передается методом GET. 

К тому же не всегда можно передавать форму, иногда нужно подставить GET параметр прямо в ссылку.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
dobrolub
Дата 15.12.2011, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

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



Верно, правильнее его там оставить.
PM   Вверх
4epT
Дата 15.12.2011, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

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

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


 




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


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

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