1

我正在使用 Java EE 和 Spring 开发一个需要输出中文 UTF-8 字符的网站。我有一个 servlet,它在经过一些处理后对 jsp 执行 request.getRequestDispatcher(...).forward(request,response)。在这个 servlet 中,在进行转发之前,我有

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

在 jsp 文件(以及我项目中的每个 jsp 文件)的顶部,我有:

<%@page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>

作为测试,我在那个 jsp 页面上硬编码了一个中文 UTF-8 字符。当我将此应用程序部署到Tomcat 6并点击servlet时,浏览器检测到页面是UTF-8并输出汉字:采 当我将此应用程序部署到Weblogic 10并点击servlet时,浏览器检测到页面是UTF-8但显示:éÂÂ

在我的weblogic启动脚本中,我尝试了-Dfile.encoding的不同java选项,比如UTF-8和utf8,但是不管设置如何,汉字都是乱码。

在 weblogic.xml 我有这个:

<charset-params>
    <input-charset>
        <resource-path>/*</resource-path>
        <java-charset-name>UTF-8</java-charset-name>
    </input-charset>
</charset-params>

<jsp-descriptor>
    <encoding>UTF-8</encoding>
</jsp-descriptor>

在 web.xml 我有这个:

filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter> 

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
...
<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <page-encoding>UTF-8</page-encoding>
    </jsp-property-group>
</jsp-config>

但这些都没有解决问题。

我所有的源文件都是 UTF-8 编码的。

此外,当我有一个包含中文字符的 .jsp 或 .html 页面并直接访问它而不是由 Weblogic 中的 servlet 转发给它时,中文字符可以正确显示。

另外,当在我的 servlet 中,我什至不执行对 jsp 的转发,而是直接将汉字写入响应(使用 response.getWriter().write()),汉字仍然不正确(即使浏览器正确确定编码为 UTF-8)。

为什么它在 Tomcat 6 中有效,但在 Weblogic 10 中无效?如何让角色显示?

4

2 回答 2

1

虽然我不确定为什么在响应中直接写入字符会导致中文字符显示不正确,但我已经弄清楚了在转发到 jsp 页面时导致字符不正确的原因。我转发到的 jsp 页面执行 ac:import 另一个 jsp 页面。Tomcat 和 Weblogic 处理这个问题的方式不同。为了确保导入的文件具有正确的编码,我需要在 c:import 标签中指定属性“characterEncoding="UTF-8"”,这导致导入的标签以正确的编码输出。对于 c:import 依赖的任何代码,应用服务器之间的默认字符编码似乎有所不同(这可能解释了为什么直接从 servlet 响应写入字符在 Tomcat 中按我想要的而不是在 Weblogic 中工作)。

于 2013-08-20T18:49:18.887 回答
0

也许这有帮助

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app>
    <jsp-descriptor>
        <encoding>UTF-8</encoding>
    </jsp-descriptor>
    <charset-params>
        <input-charset>
            <resource-path>/*</resource-path>
            <java-charset-name>UTF-8</java-charset-name>
        </input-charset>
    </charset-params>
</weblogic-web-app>
于 2013-08-17T00:07:11.627 回答