У меня есть веб-приложение, в котором мне нужно отображать символы Юникода. Все нормально, когда я пишу строки в jsp, например:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.xyz.foo.ConsoleApp" %>
<html>
<head>
<meta charset="UTF-8"/>
</head>
<body><%= "Setúbal" %></body>
</html>
Я получаю желаемый результат: Setúbal
Однако эквивалентный код в сервлете не отображается должным образом, например:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.println("<html>");
writer.println("<head><meta charset='UTF-8'/></head>");
writer.println("<body>Setúbal</body>");
writer.println("</html>");
}
То же самое происходит, когда в jsp я загружаю текст из класса:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="com.xyz.foo.ConsoleApp" %>
<html>
<head>
<meta charset="UTF-8"/>
</head>
<body><%= ConsoleApp.getText() %></body>
</html>
В обоих случаях я получаю странные символы: Set√∫bal
Все файлы имеют формат UTF-8, а заголовки ответа имеют следующее:
Content-Type text/html; charset=utf-8
Content-Encoding gzip
Date Tue, 09 Nov 2010 09:44:05 GMT
Server Google Frontend
Cache-Control private, x-gzip-ok=""
Content-Length 438