Особенность кодировки символов сервлетов и jsp - PullRequest
2 голосов
/ 09 ноября 2010

У меня есть веб-приложение, в котором мне нужно отображать символы Юникода. Все нормально, когда я пишу строки в 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

1 Ответ

4 голосов
/ 09 ноября 2010

Используйте параметр javac -encoding, чтобы сообщить javac, в какой кодировке хранится ваш java-источник, в противном случае он использует платформу по умолчанию, которая, очевидно, не является UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...