Java 使web应用程序使用UTF-8

Java 使web应用程序使用UTF-8,java,tomcat,web-applications,utf-8,tomcat7,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.s

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

编码器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码器
*

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

首先,了解
-Dfile.encoding=UTF-8
的确切功能非常重要。它是Sun/Oracle JVM特定的设置(因此不一定在所有其他JVM中工作!),基本上指示JVM使用给定的编码而不是平台默认编码读取Java
.class
文件。因此,设置此选项只能解决由于在Java类/变量名中使用“特殊字符”或在Java类中使用硬编码的
String
值(是的,您读得对:只有Java类,而不是其他文件,因此绝对不是属性文件或JSF XHTML文件等)而导致的任何可能问题

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

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


编码器
/*
(顺便说一句,您不一定需要Spring,只要在
doFilter()
实现中只有2或3行就足够了)

另见:

如果启用了autodeploy,只需将更新的war放入webapp目录即可。如果没有,您需要请求tomcat重新启动。我的问题是无法访问tomcat或重新启动它。只是我无法为Tomcat设置环境变量。你能让你的服务器管理员将操作系统默认编码更改为UTF-8吗?你能更改Tomcat的配置文件吗?@dngfng否。管理员说“不修改操作系统配置至关重要”。当然,我只将这些值存储在类路径中的*.properties文件中(在
/resources/
下)。我使用Spring并不只是为了这个,但在这里,我使用它不必重写这个相当简单的代码。我用Spring作为我的IoC容器。谢谢你的提示。我按照建议更改了url模式,但没有任何更改。然后更详细地描述问题症状。“它返回乱码字符”是绝对不够的信息。试着从开发者的角度来描述问题,而不是从最终用户的角度。阅读“请参阅”这篇文章可能有助于更好地理解它是如何在封面下工作的,并使用正确的术语。顺便说一句,它还详细描述了解决方案。最后,我通过手动转换从UTF-8格式的“.properties”文件读取的文本并将其交给web应用程序来解决这个问题。这是可能的,因为你的“也看到了”,顺便说一下,这是非常棒的。谢谢你的回答,也很抱歉迟了接受。我很忙。