【发布时间】: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