Когда вы работаете с данными UTF-8, они могут быть очень хрупкими.Каждый шаг в цепочке должен указывать utf8.
(1) В базе данных убедитесь, что таблица имеет кодировку и сопоставление UTF8.«Показать статус таблицы» скажет вам это.Google для "mysql alter table utf8" для получения дополнительной информации.
(2) Соединение JDBC должно указать кодировку UTF8.Для Connector / J это будет что-то похожее на:
useUnicode=true&characterEncoding=UTF-8
(3) Каждый поток чтения / записи, каждое преобразование строки в байт в коде должно указывать UTF-8 в качестве кодировки.Это легко пропустить.Если он пропущен, Java будет использовать системную настройку по умолчанию, которая будет варьироваться от сервера к серверу.
(4) Здесь не применимо, но для данных, отправленных пользователем из формы, вам необходимо установить кодировку символа запроса.(Я делаю это в фильтре сервлетов)
request.setCharacterEncoding("UTF-8");
(5) Возможно, здесь не применимо, но если вы выводите HTML / XML / текст из своего сервлета, установите заголовок кодировки символов HTTP.(Это может применяться, если вы генерируете файл Excel как файл XML).
response.setContentType("text/html; charset=UTF-8");