Weblogic 10.3中出现的中文UTF-8字符不正确,但Tomcat 6中没有

时间:2013-08-16 19:32:29

标签: java jsp unicode character-encoding weblogic

我正在使用Java EE和Spring开发一个需要输出中文UTF-8字符的网站。我有一个servlet,它在一些处理之后执行request.getRequestDispatcher(...)。forward(request,response)到jsp。在这个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中无效?如何显示角色?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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>