java - 使 Web 应用程序使用 UTF-8

标签 java tomcat web-applications utf-8 tomcat7

我们使用的是 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>

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

最佳答案

首先,了解 -Dfile.encoding=UTF-8 的确切用途非常重要。它是 Sun/Oracle JVM 特定的设置(因此不一定适用于所有其他 JVM!),它基本上指示 JVM 使用给定的编码而不是使用给定的编码来读取 Java .class 文件。平台默认一。因此,设置它只能解决任何可能的 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,只需 a custom Filter,在 doFilter() 实现中只有 2 或 3 行已经足够了)

另请参阅:

关于java - 使 Web 应用程序使用 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675070/

相关文章:

java - java.lang.UnsatisfiedLinkError:否GurobiJni/Tomcat

java - 带有JDBC池的tomcat上下文异常

java - 使用浏览器启动小程序时出现问题

java - Java类Stack继承自Vector有哪些负面影响?

apache - 使用 mod_jk 在 Apache 和 Tomcat 之间映射 URL

java - 我无法运行一个非常简单的 maven java web 应用程序

java - 针对 XSD 的 XML 验证 : cvc-complex-type. 2.4.a

java - 为什么我的费马素性测试方法不起作用?

javascript - ServiceWorker 实例与地理位置更新的预期比率

java - 单独的 httpsession 监听器实例是否与创建的每个 session 绑定(bind)?