Символы Unicode в сервлет-приложении отображаются как вопросительные знаки

Недавно я реализовал интернационализацию на основе того, как интернационализировать веб-приложение Java? ,

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

образ

Я проверял исключения в журналах сервера, но я не мог найти никого.

Как это вызвано и как я могу его решить?

Видя ?????? вместо понятных символов (и даже вместо Mojibake ) обычно указывает, что ответственная передача данных сама по себе очень хорошо осведомлена о кодировании, используемом как в источнике, так и в пункте назначения. В среднем веб-приложении есть только 2 места, где это так: точка, когда данные передаются в / из БД с помощью JDBC и точка, когда данные передаются на HTTP-ответ response.getWriter() (as неявно используемой JSP).

В вашем конкретном случае с файлами свойств нет средств для БД, поэтому ответ HTTP остается основным подозреваемым. Эта проблема может возникнуть, если серверу не было предложено использовать UTF-8 для декодирования символов, которые записываются в ответ HTTP, но вместо этого используется некоторая стандартная кодировка платформы, чаще всего ISO-8859-1. Таким образом, любой символ в источнике, который не покрыт ISO-8859-1, будет превращен в знак вопроса. Поскольку ISO-8859-1 предназначен исключительно для латинских символов, это, таким образом, повлияет на все нелатинские символы, такие как китайский, японский, арабский, кириллический, иврит, санскрит и т. Д. Все они будут написаны как вопросительные знаки.

Это можно исправить на основе JSP, добавив следующее к самой вершине JSP:

 <%@page pageEncoding="UTF-8" %> 

(обратите внимание, что вам действительно нужно поместить это в каждый JSP, а также включенные файлы!)

Или, лучше, исправьте его на основе всей заявки, добавив следующую запись в web.xml webapp:

   *.jsp UTF-8   

Смотрите также:

  • Unicode – Как правильно получить символы?
  • Как передать символы Юникода как JSP / Servlet request.getParameter?

На самом деле нам не хватает одной строки в сервлете до отправки ответа.

т.е. мы забываем установить тип содержимого.

Вот код для включения в сервлет

 response.setContentType("text/html;charset=UTF-8"); 

благодаря

Давайте будем гением компьютера.