2009-12-21 42 views
1

我试图在JSP页面中显示XHTML内容。编码是UTF8。 jsp页面调用一个java类中的方法,该方法返回xhtml内容。基本上这是我的我的jsp页面JSP中的UTF8编码的XHTML内容

<!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> 

问题是某些字符显示为QuestionMarks(?)。 但是,如果java类(myJavaClass)将相同的内容写入文件,则在打开文件并在文本编辑器中查看文件时,所有字符都将正确显示。 Tomcat的控制台还显示所有正确字符的xhtml内容,只在浏览器中看到问号。

任何人都可以想到为什么会发生这种情况?

回答

3

有很多因素可以发挥作用。在您的具体情况下,您使用旧式的scriptbar将XML字符串写入响应。 <%= foo %>隐含地称为response.getWriter().write(foo)。您需要通过添加设置响应作家的字符编码以及下面要顶你的JSP的

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

这将隐式调用response.setCharacterEncoding("UTF-8")它也将响应编码设置为UTF-8如果尚未完成,请添加适当的响应标头。

,你真的需要考虑到所有的因素有:

  1. 请求编码。对于GET请求,这需要在appserver的配置中进行设置。对于POST请求,您需要使用HttpServletRequest#setCharacterEncoding()
  2. 响应编码。这已经在这里回答了。
  3. 数据库编码。在SQL CREATE中指定编码。

有关所有解决方案的更多背景信息和详细概述,您可能会发现this article有用。

也就是说,如果您已经在HTML头中设置了<meta http-equiv="content-type">,那么行<% response.setContentType("application/xhtml+xml"); %>是完全多余的。摆脱他们,如果可能的话还有脚本。只需使用EL:

${someBean.somePropertyReturningXmlString}