【问题标题】:Making web application use UTF-8使 Web 应用程序使用 UTF-8
【发布时间】:2012-10-01 14:17:42
【问题描述】:

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

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

【问题讨论】:

  • 如果启用了自动部署,只需将更新的战争放入 webapp 目录,它就会工作。如果没有,你需要请求 tomcat 重启。
  • 我的问题是无法访问 Tomcat 或重新启动它。只是我无法为Tomcat设置环境变量。
  • 您能否让您的服务器管理员将操作系统默认编码更改为 UTF-8?
  • 可以修改tomcat的配置文件吗?
  • @dngfng 不。根据管理员的说法,“不修改操作系统配置至关重要”。

标签: java tomcat web-applications utf-8 tomcat7


【解决方案1】:

首先,重要的是理解-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 FilterdoFilter() 实现中只有 2 或 3 行就足够了)

另见:

【讨论】:

  • 当然,我只是将这些值存储在类路径中的 *.properties 文件中(在/resources/ 下)。我不仅仅为此使用 Spring,但在这里我使用它不必重写这个相当简单的代码。我使用 Spring 作为我的 IoC 容器。
  • 感谢您的提示。我按照建议更改了 url 模式,但没有任何改变。
  • 然后更详细地描述问题症状。 “它返回乱码”是绝对不足的信息。尝试从开发人员的角度描述问题,而不是从最终用户的角度。阅读“另请参阅”文章可能有助于更好地理解它在幕后的工作原理并使用正确的术语。顺便也详细介绍了解决方案。
  • 最后,我通过手动转换从 UTF-8 格式的“.properties”文件读取的文本并将它们交给 Web 应用程序来解决这个问题。这可能是由于您的“另见”,顺便说一句,这非常棒。感谢您的回答,对于迟到的接受感到抱歉。我比较忙。
猜你喜欢
  • 2012-02-16
  • 2011-10-22
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
相关资源
最近更新 更多