Eclipse/Spring/Tomcat 6的奇怪字符编码问题

Cza*_*zar 3 java eclipse spring jsp character-encoding

我一整天都在尝试,但无法找到合适的解决方案.我的问题是:我正在我的本地Tomcat中开发一个基于Spring MVC的应用程序.我的MySQl数据库有UTF-8编码集,当使用phpMyAdmin时,其中的所有内容都正确显示.log4j在catalina.out中使用的LOG文件中的输出也可正常工作.

我的JSP页面由配置

<!-- encoding -->
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page pageEncoding="UTF-8" %>
Run Code Online (Sandbox Code Playgroud)

还显示我的JSP数据工作正常.我也可以使用特殊字符从我的控制器发送数据,而不会有任何数据库干扰,例如

String str = "UTF-8 Test: Ä Ö Ü ß è é â";
logger.debug(str);
mav.addObject("utftest", str);
Run Code Online (Sandbox Code Playgroud)

在浏览器的日志和jsp页面上正确显示.

但是:当我的JSP文件中直接使用特殊字符时,例如标题中的文本,这不起作用.FF和谷歌浏览器显示奇怪的字符,但报告页面为UTF-8.切换到拉丁语时,字符变得越来越奇怪.

从我的messages.properties文件中显示文本标记时会出现同样的问题,尽管Eclipse在右键单击时会说明将使用UTF-8.

我有点迷路了,现在不知道在哪里检查.

摘要:

  • 数据库存储很好
  • JSP上的DB输出很好
  • JSP上直接输出控制器的输出很好
  • 甚至以表格形式阅读也没关系
  • .properties文件和JSP文本不好 !!!

有任何想法吗?我非常感谢和提示.

Pom*_*pot 6

任务

我遇到了与你的问题完全相同的问题,配置非常相似(Tomcat,Spring,Spring Web Flow,JSF2).

关于我自己调查的一些事实:

  • Tomcat Window下的WAR:编码问题,
  • Tomcat Linux下的相同WAR:没问题→可疑操作系统默认编码,因为Linux是UTF-8,
  • 在Windows上由Eclipse WTP运行的Tomcat下的相同WAR:没问题→WTF ?!
  • 使用自然拉丁字符而不是unicode占位符传递UTF-8中的属性文件:解决外部化标签的问题,
  • 在Facelets(JSF2页面)中也是如此:总是遇到问题,只有工作是<f:verbatim>&amp;eacute;</f:verbatim>.

在检查了我在论坛上找到的经典先决条件和建议的所有代码之后仍然遇到问题:

  • <?xml version="1.0" encoding="UTF-8" ?> 在XML文件的顶部,
  • <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 在同一文件的HTML标题内,
  • encoding="UTF-8"<f:view>.

Tomcat的配置在以下方面没有做任何事情:

  • URIEncoding = server.xml中连接器上的"UTF-8" (正常,因为它涉及URI编码而非页面编码)
  • org.springframework.web.filter.CharacterEncodingFilter 开和关,
  • 还有(我可能错过了这里的观点):

    <locale-encoding-mapping-list>
      <locale-encoding-mapping>
        <locale>fr</locale>
        <encoding>UTF-8</encoding>
      </locale-encoding-mapping>
    </locale-encoding-mapping-list>
    
    Run Code Online (Sandbox Code Playgroud)

钥匙

我找到了比较WTP和经典命令行MS-DOS Tomcat启动之间的Tomcat命令行的解决方案.唯一的区别是参数-Dfile.encoding=UTF-8.这是解决问题的关键.

设置JAVA_OPTS = -Dfile.encoding ="UTF-8",它工作正常.

(尝试)解释

我发现的唯一解释是,Tomcat使用JVM编码,默认情况下是系统编码(Linux上为UTF-8,Windows上为CP1252).Eclipse WTP根据其工作空间编码设置强制JVM编码.以UTF-8传递JVM提供了解决方案.

我怀疑它不是真的是正确的,并且我的堆栈或由maven-resources-pluginmaven-war-plugin进行的资源过滤都存在配置问题,但我还没有找到它.