【问题标题】:double encoded UTF-8 output of tag file in jsp contentjsp内容中标签文件的双编码UTF-8输出
【发布时间】:2013-06-08 21:29:06
【问题描述】:

我有一些以 UTF-8 正确编码的 JSP 页面,使用十六进制编辑器、Eclipse 和 TextPad 进行了验证,并具有适当的 pageEncoding 和 contentType 属性,每个都指定了 UTF-8。在浏览器中一切看起来都很好。现在我需要将一些内容提取到 JSP 标记文件中,而标记文件本身又被正确编码为 UTF-8 并且每个页面编码为 UTF-8。我遵循了 Oracle 的文档:

http://docs.oracle.com/javaee/5/tutorial/doc/bnama.html#bname

现在的问题是,例如德语变音符号在浏览器中显示为双编码 UTF-8,而不是“ö”,我看到“ö”。如果我在 Eclipse 中将 pageEncoding 更改为 windows-1252,它本身似乎可以正确地重新编码文件,再次使用 TextPad 和十六进制编辑器进行验证,浏览器中的一切看起来都很好。

由于标记文件用于自动为 TagHandlers 创建 Java 源代码,我查看了生成的源代码文件并认识到在 pageEncoding UTF-8 上源文件本身已经包含用于德语变音符号的双编码 UTF-8。源文件本身以 UTF-8 编码,如果我在 TextPad 中查看源文件,我的德语变音符号的 out.write-statements 包含“ö”,它也讲述了 UTF-8。如果我在十六进制编辑器中打开源文件,我会看到“ö”字符出现更多字节,正如双编码 UTF-8 所预期的那样。

以下是生成的源代码文件的示例行:

out.write("\t\t\t\t\ttitle=\"Verzeichnis löschen\">\r\n");

我已经更改了我的 Eclipse 工作区的一些默认编码选项,但没有任何效果。在我看来,在标记文件的源代码生成期间,标记文件本身的 UTF-8 字符被保留,这与生成 JSP 文件的源代码的方式相反。如果我查看生成的带有德语变音符号的 JSP 文件的源代码,它们在 TextPad 中正确显示为“ö”,它识别编码为 UTF-8 的文件,或者如果我在十六进制编辑器中打开文件,则显示为“ö”。

我在这里有点迷茫,有没有人知道为什么 UTF-8 编码的标记文件以这种方式处理并且与 JSP 文件不同?我做错了什么?

感谢任何提示!

有人认为还提到:

标记文件仍用于编码为 UTF-8 等的 JSP 文件中,因此标记文件生成的内容/编码/任何“周围”的内容仍然是正确编码的 UTF-8。正如我之前所说,标记文件的内容只是一些以前在 JSP 文件中运行良好的语句。

以下是我使用标记文件的语句:

<%@ taglib  tagdir="/WEB-INF/tags/dirListing"
        prefix="dirListing"
%>
[...]
<dirListing:tree dir="${requestScope.dir}" />

【问题讨论】:

  • 很抱歉,我想我不明白你的回答。如果字符“ö”被编码为 ISO-8859-1 而不是两个,则字符“ö”是一个字节,两个字节是 UTF-8,并且带有 .getBytes("UTF-8") 的行清楚地从它的内部表示转换 Java 字符串到 UTF-8 中,然后打印 UTF-8 编码的字节,而不是字符,作为 ISO-8859-1 字符。这不是 ISO-8859-1 中的“ö”,“ö”具有字节 F6,可以在维基百科中清楚地看到。
  • 除此之外,Eclipse、TextPad 和 Hex Editor 这三个都表明标记文件被编码为 UTF-8。如果我将标记文件的 pageEncoding 指令从 UTF-8 更改为 windows-1252,反之亦然,文件的内容会发生变化,Eclipse 会像 TextPad 一样识别不同的编码,并且我的“ö”在 UTF-8 上有两个字节如果我在十六进制编辑器中打开文件,则在 windows-1252 上编码和一个字节。我明天可能会再检查一次,但我今天花了几个小时来确保这一点。

标签: java eclipse jsp utf-8 character-encoding


【解决方案1】:

您是否尝试过按照该问题的已接受答案中的建议添加 pageEncoding 指令?

Charset of JSP tags

我确实理解您的问题不是对标签编码的正确解释,而是显然 Eclipse 对文件进行了错误编码。

【讨论】:

  • 是的,我在 JSP 文件和标记文件中有 pageEncoding 指令。这样我就可以测试并看到它在标记文件中与 windows-1252 一起工作,这会在生成的 Java 源代码和浏览器中生成正确编码的 UTF-8。
猜你喜欢
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2012-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
相关资源
最近更新 更多