Содержимое в кодировке UTF8 XHTML в JSP - PullRequest
1 голос
/ 21 декабря 2009

Я пытаюсь отобразить содержимое XHTML на странице JSP. Кодировка UTF8. Страница jsp вызывает метод в классе java, а метод возвращает содержимое xhtml. В основном это то, что у меня есть на моей странице JSP

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
<% response.setContentType("application/xhtml+xml"); %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
</head>
<body>
<% response.setContentType("application/xhtml+xml"); %>
<%=myJavaClass.getXHTML()%>
</body>
</html>

Проблема в том, что некоторые символы отображаются в виде знаков вопроса (?). Однако если класс java (myJavaClass) записывает в файл одинаковое содержимое, все символы отображаются правильно, когда я открываю файл и просматриваю его в текстовом редакторе. Консоль Tomcat также отображает содержимое xhtml со всеми правильными символами, только в браузере я вижу знаки вопроса.

Может кто-нибудь придумать причину, по которой это происходит?

1 Ответ

4 голосов
/ 21 декабря 2009

Есть много факторов, которые могут играть роль. В вашем конкретном случае вы используете старомодные скриптлеты для записи строки XML в ответ. <%= foo %> неявно вызывает response.getWriter().write(foo). Вам также необходимо установить кодировку символов автора ответов, добавив следующее к top вашего JSP:

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

Это установит кодировку ответа на UTF-8 путем неявного вызова response.setCharacterEncoding("UTF-8") и , а также добавит соответствующий заголовок ответа, если это еще не сделано.

Все факторы, которые вы действительно должны принять во внимание:

  1. Запрос кодировки. Для запросов GET это должно быть установлено в конфигурации appserver. Для запросов POST вам необходимо использовать HttpServletRequest#setCharacterEncoding().
  2. Кодировка ответа. Здесь уже дан ответ.
  3. Кодировка базы данных. Укажите кодировку во время SQL CREATE.

Для получения дополнительной информации и подробного обзора всех решений вы можете найти эту статью полезной.

Тем не менее, строки <% response.setContentType("application/xhtml+xml"); %> полностью излишни, если вы уже установили <meta http-equiv="content-type"> в заголовке HTML. Избавьтесь от них и, если возможно, от сценариев. Просто используйте EL:

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