java - 中文 UTF-8 字符在 Weblogic 10.3 中显示不正确,但在 Tomcat 6 中则不然

标签 java jsp unicode character-encoding weblogic

我正在使用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启动脚本中,我尝试了不同的java选项-Dfile.encoding,例如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 中无效?如何让角色显示出来?

最佳答案

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

关于java - 中文 UTF-8 字符在 Weblogic 10.3 中显示不正确,但在 Tomcat 6 中则不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18280798/

相关文章:

java - 从列表中的任何值获取键

java - 在 prepare 语句中传递数组参数 - 获取 "java.sql.SQLFeatureNotSupportedException"

javascript - 按 T​​AB 键在相同/不同页面上显示文本框值

Python 3 正则表达式和 Unicode 表情

python - 使用 xhtml2pdf 将 unicode 模板转换为 pdf 时出现问题

python - 在 Python 中定义 unicode 变量

java - PreparedStatement IN 子句替代方案?

java - 为什么 Java 集合不提供方便的 map 方法?

java - 当路径是动态时打开jsp页面

java - 在 tomcat 版本 8.0.24 中放置类和 beans 文件的位置