Я использую плагин Maven App Engine для развертывания простого сервлета:
package test;
import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/test")
public class TestServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentType("application/json");
String output = "testing ¡ ¿ ñ testing";
response.getOutputStream().println(output);
}
}
Этот сервлет выводит некоторый текст, который содержит специальные символы, такие как ¡
, ¿
и ñ
.
Я запускаю локальный сервер разработки: mvn appengine:devserver
И я перехожу к http://localhost:8080/test
. Я вижу это:
testing � � � testing
Я понял, что это заменяющие символы и указывают, что что-то не так с моей кодировкой.
Я пытался специально установить кодировку:
response.setContentType("application/json; charset=UTF-8");
Я также пробовал:
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
Я подтвердил, что браузер получает эту кодировку символов в заголовках ответа:
Но я по-прежнему вижу заменяющие символы вместо оригинальных специальных символов.
Если я разверну на живом сайте App Engine, он будет работать нормально, и будут показаны оригинальные специальные символы. Я вижу, что живой сайт имеет content-encoding
из gzip
, но это может быть красная сельдь:
Я пробовал это как на Windows, так и на Linux, и у меня одинаковое поведение на обоих.
Как настроить кодировку локального сервера разработки, чтобы я мог видеть оригинальные специальные символы вместо символов замены?