2

我们在使用 Tomcat 7 的生产服务器上,无论出于何种原因,管理员都不会CATALINA_OPTS="-Dfile.encoding=UTF-8"为我们设置解决方法。

这意味着现在在部署 WAR 文件时,Tomcat 返回乱码而不是对应的 Unicode。

我们也将其包含在我们的web.xml中,但无济于事:

<filter>
    <filter-name>encoder</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>encoder</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

我们如何在不派人闯入服务器机房并修改配置的情况下进行管理?

4

1 回答 1

2

首先,重要的是要了解确切的作用-Dfile.encoding=UTF-8。这是特定于 Sun/Oracle JVM 的设置(因此不一定适用于所有其他 JVM!),它基本上指示 JVM.class使用给定编码而不是平台默认编码读取 Java 文件。因此,设置它只会解决任何可能的Mojibake问题,这些问题是由于在 Java 类/变量名中使用“特殊字符”或在 Java 类中使用硬编码String值引起的(是的,你没看错:只有 Java 类,而不是其他文件,因此肯定不是属性文件或 JSF XHTML 文件等)。

老实说,我很难想象这是解决您具体问题的正确方法。为什么会在 Java 类中直接使用特殊字符?类/变量名称应为全英文,本地化文本应放在资源包文件中。每个自尊的 Java 开发人员都遵守这个约定。

鉴于这一事实,并假设您根本没有在 Java 类中使用特殊字符,因此我相信您的具体问题是由其他原因引起的。问题症状描述得不够具体(它到底在哪一步失败?您期望和得到哪些字符?等等)以查看具体问题的可能根本原因。我至少可以看出你的 Spring 过滤器的 URL 模式是完全错误的。它必须映射到/*

<filter-mapping>
    <filter-name>encoder</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

(顺便说一句,您不一定需要Spring,只需一个自定义Filter,只有 2 或 3 行doFilter()实现就足够了)

也可以看看:

于 2012-10-01T14:32:34.893 回答