Вопросительные знаки обычно используются, когда символьно-байтовый преобразователь / пишущий сам знает о кодировке, символы на самом деле закодированы в и кодировки, которую имеют символы быть декодированным. Если набор символов для декодирования не поддерживает определенный символ в исходной кодировке, он преобразуется в знак вопроса.
В среднем веб-приложении с базой данных базы данных это может произойти в двух местах:
- Когда данные пользователя будут вставлены / обновлены в БД.
- Когда тело ответа HTTP будет написано и отправлено клиенту.
В обоих случаях используется сеть TCP / IP, которая понимает только байты, и сервер и клиент обычно знают о кодировке, используемой с обеих сторон. Во всех остальных случаях вы бы видели Моджибаке .
Чтобы охватить первый случай, вам необходимо убедиться, что БД и таблица сконфигурированы для использования UTF-8. Вы обычно указываете это во время CREATE
. Вот пример на диалекте MySQL.
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
С некоторыми драйверами JDBC, такими как MySQL, вы также должны указать самому драйверу команду использовать UTF-8.
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
Чтобы охватить второй случай, вам нужно убедиться, что автору ответов дано указание использовать UTF-8 для декодирования символов в байты. При использовании JSP в качестве представления достаточно добавить следующее к верхней части каждой страницы JSP (также включающей в себя) (это не только устанавливает кодировку ответа, но и неявно устанавливает правильный заголовок ответа).
<%@ page pageEncoding="UTF-8" %>
Смотри также:
Что касается фильтра кодировки символов Spring, который вы используете в данный момент, он только устанавливает кодировку запроса, чтобы вы могли убедиться, что отправленные данные интерпретируются как UTF-8. Все, что в основном делает, это следующее:
request.setCharacterEncoding("UTF-8");
и больше ничего. Обратите внимание, что это касается только запросов POST, для запросов GET вам все равно потребуется настроить веб-сервер для интерпретации URL-адресов как UTF-8.