Задать вопрос
@n199a
Java

Почему на JSP странице русские символы отображаются кракозябрами?

У меня случилось так, что при интернационализации моего веб-проекта, русские символы отображаются кракозябрами.
Что я делал:
1. Я использую properties-файлы, в которых на нужном языке пишу текст. Нужно проверить, чтобы текст в данных файлах был установлен как UTF-8.

Это не помогло. Идём дальше.

2. Через Filter задать кодировку UTF-8.

Создаем фильтр, в котором будем устанавливать кодировку UTF-8 для request и response:

@WebFilter(filterName = "EncodingFilter", urlPatterns = {"/controller"})
   public class EncodingFilter implements Filter {
       private static final Logger LOGGER = LogManager.getLogger();
       private final static String ENCODING_UTF_8 = "UTF-8";
   
       @Override
       public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
           LOGGER.info("Current encoding for request: {}, for response: {}.", servletRequest.getCharacterEncoding(), servletResponse.getCharacterEncoding());
           HttpServletRequest request = (HttpServletRequest) servletRequest;
           HttpServletResponse response = (HttpServletResponse) servletResponse;
   
           request.setCharacterEncoding(ENCODING_UTF_8);
           response.setCharacterEncoding(ENCODING_UTF_8);
           LOGGER.info("Set encoding for request: {}, for response: {}.", request.getCharacterEncoding(), response.getCharacterEncoding());
   
           filterChain.doFilter(request, response);
       }
   }


Но и это не помогло. Идём дальше.

3. Для каждой jsp-страницы нужно также задать кодировку UTF-8.

Сделать это можно двумя способами:

1. Прописав в web.xml файле настройки:

<!-- Encoding for jsp-pages to UTF-8 -->
      <jsp-config>
          <jsp-property-group>
              <url-pattern>*.jsp</url-pattern>
              <page-encoding>UTF-8</page-encoding>
          </jsp-property-group>
      </jsp-config>


2. Прописать на каждой jsp-странице:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


Но и это не помогло. Идём дальше.

4. Потом я, согласно [документации](tomcat.apache.org/tomcat-7.0-doc/config/http.html), настроил `Tomcat` следующим образом.

Открываем файл C:\Program Files\Apache Software Foundation\Tomcat 10.0\conf\server.xml и добавляем в секцию атрибут URIEncoding="UTF-8". В конечном итоге секция будет выглядеть следующим образом:

<Connector port="8081" protocol="HTTP/1.1"
                  connectionTimeout="20000"
                  redirectPort="8443" 
                  URIEncoding="UTF-8"/>


Но и это не помогло. Перезагрузил ноутбук, думал поможет, но не заработало. Опять идём дальше.

5. Добавляем на jsp-страницу вот это:

<%request.setCharacterEncoding("UTF-8");%>

На выходе получаю:
ÐлавнаÑ
РнаÑ
ÐонÑакÑÑ


И это тоже не работает. В чем проблема?
  • Вопрос задан
  • 2323 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день!
Я использую properties-файлы, в которых на нужном языке пишу текст. Нужно проверить, чтобы текст в данных файлах был установлен как UTF-8

Если не ошибаюсь, то в properties используется кодировка ISO 8859-1
Вот, похожий вопрос касаемый кодировки файла properties
https://stackoverflow.com/questions/37436927/utf-8...

Что касается ваших крякозабров, то основываясь на этой инфографике
https://evc27.pcloud.com/dpZCsmjtXZHvQPG0Z4gx7Z7Zj...
У вас UTF-8 кодировка, которая отображается в win-1252

Также проверьте кодировку браузера. В некоторых браузерах есть возможность задавать кодировку. Если в других браузерах страница отображается корректно и проблема только в вашем браузере, то скорее всего проблема на клиентской части с кодировкой браузера.

И еще вариант в html должна быть указана кодировка utf-8 внутри тега head
<head>
  <meta charset="UTF-8">
</head>
Ответ написан
@lovavladi
Спасібо мені помогло!
Ответ написан
Комментировать
@hurrdurrrderp
Мне помогло добавить
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

в начале каждого .jsp-файла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы