【问题标题】:JSP output encodingJSP输出编码
【发布时间】:2011-05-02 19:45:22
【问题描述】:

当我写以下内容时

é

甚至

<%=new String(new byte[]{(byte) 0xC3, (byte) 0xA9}, "UTF-8")%>

我得到一个长度为 1 的字符串。它包含一个 UTF-8 字符 C3A9é

但是当它被写入浏览器时,浏览器无法解码它,除非我使用 latin1。所以这意味着即使在我拥有的 JSP 的顶部,它也会被编码和编写为西方语言

<%@page import="..." contentType="text/html" pageEncoding="UTF-8" session="false"%>

如何让 JSP 输出 UTF-8 而不是编写 UTF-8 标头然后使用 latin1 编码? “西方 (ISO-8859-1)”

【问题讨论】:

  • 哇,在模板中只写é 或最高&lt;%="é"%&gt; 有什么问题?
  • @BalusC:我想保证没有编辑器编码问题。已编辑。
  • 啊,你用的是MSIE作为浏览器?
  • @BalusC:没有。Firefox 和 Chrome。

标签: jsp character-encoding


【解决方案1】:

您应该只使用pageEncoding,并编写符号本身,而不是通过代码引用它。

还要确保您的 .jsp 文件也以 UTF-8 编码。您的 IDE 应该处理 pageEncoding 属性并适当地设置编码,但使用特定设置或者如果不使用 IDE,.jsp 仍然可以在 ISO-8859-1 中编码。将其更改为UTF-8

最后,确保您的回复确实使用 UTF-8 作为编码(例如使用 firebug)。如果没有,请尝试设置response.setCharacterEncoding(..)

【讨论】:

  • 用单个字符 é 替换了 &lt;%=...%&gt; 子句。我正在使用 NetBeans IDE,并已使用十六进制编辑器验证它以 UTF-8 正确编码,并在左侧显示两个字节 C3A9,在右侧显示字符 é。它仍然不起作用。我什至检查了生成的 ..._jsp.java 文件。它正确显示相同的字符和相同的编码。所以问题只能出在 .java 到 .class 编译时或运行时的编码中。
  • @George Bailey 很好,它对我有用。试试我最后的建议。如果它不起作用,那么我没有看到您的情况。
  • 因此您在致电@page pageEncoding 之前就已经在回复回复了?否则这不应该发生,这实际上也不是 JSP 中的正确解决方案。 @page 应该是 JSP 中的第一行,并且预处理 servlet(如果有的话)不应该将任何字符写入响应正文。
  • @BalusC:我认为问题在于我使用include 而不是forward 来调用JSP。我一直没有使用forward,因为它将 URL 更改为 JSP 的路径,这不是我所追求的。
  • &lt;%@page pageEncoding="UTF-8"%&gt; 必须设置在 ALL JSP 中,因此也必须设置在父 JSP 中,而不仅仅是子 JSP。
猜你喜欢
  • 2015-02-21
  • 2013-06-08
  • 2010-10-04
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多