【问题标题】:Grails - serve HTML files as UTF-8?Grails - 将 HTML 文件作为 UTF-8 提供?
【发布时间】:2011-11-21 04:14:02
【问题描述】:

UTF-8 在通过 /web-app 通过 tomcat 提供的 .html 文件上被破坏。如果我直接使用file:/// 打开文件,它会呈现正常。如果我在运行应用程序期间查看文件,它看起来很好。但是,当我作为战争部署时,UTF-8 字符会出现乱码。

响应的内容类型似乎正确... Content-Type: text/html;charset=UTF-8,HTML 文件本身甚至似乎有正确的元声明。

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

对于默认的 URIEncoding,Tomcat 的连接器设置为“UTF-8”,所以我认为这也不是问题。普惠制表现良好;只有 HTML 文件有问题。

这里会发生什么?

编辑: 使用 firefox,我保存了原始 HTML 文件的本地副本和直接从file:///... 读取的文件以进行比较。文件之间的唯一区别在于Tomcat版本将所有非ascii字符替换为:

根据您使用的编辑器,哪个呈现为空方块或问号。字符本身似乎是 EF BF BD,它替换了 all 非 ascii 字符。不知何故,在提供文件时,tomcat 或 grails 只是踩在 unicode 字节上。 可以做什么

编辑编辑: 即使这个w3 test file 与我的文件具有相同的行为,表明我的文件可能很好,而且Tomcat/Grails 确实有问题。

【问题讨论】:

  • EF BF BD 表示UTF-8中的任何无效编码;这正是您所期望的,例如iso 8859-1 编码文件被强制为 utf-8。
  • 当我使用亚洲字符运行时,我看到了相同的结果。中文在run-app下工作,在tomcat下失败。此外,所有编辑人员都确认源 HTML 文件是没有 BOM 的 UTF8。
  • w3 中的 utf-8 测试文件也被压缩。我将用它来更新我的问题。

标签: tomcat grails utf-8 mime-types content-type


【解决方案1】:

今天,我目前在本地遇到了这个确切的问题,我能够正常工作,但是在使用 tomcat 或 glassfish 进行部署时,我的所有文件的编码都不正确。一位同事偶然发现了解决方案。

​为了让 grails 与 tomcat 一起使用时编码正常工作,您必须设置以下 tomcat 选项:

server.xml:
 <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8" />

catalina.sh:
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms2048m -Xmx2048m
-XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m
-XX:MaxPermSize=256m -XX:+DisableExplicitGC"

检查结果时请务必使用cntl-f5以避免缓存

【讨论】:

    【解决方案2】:

    在您的 web.xml 中 charEncodingFilter 之前是否有任何过滤器映射?这是使用错误编码呈现页面的常见原因。 charEncodingFilter 通常应该是 web.xml 中的第一个过滤器映射。大多数插入过滤器映射的 grails 插件都有特殊的逻辑要插入到这个之后。

    【讨论】:

    • 是的,确实有。我会测试一下。只有映射的顺序重要,过滤器本身不重要吗?
    • 无效。我什至确保包含在战争中的生成的 web.xml 首先列出,它确实列出了,但没有任何变化。
    • 更新了我的问题。看起来字节在服务文件中被完全破坏了,这让我很困惑。
    【解决方案3】:

    至少,Grails 1.3.7 不能正确地提供 HTML 文件。编写您自己的文件服务器控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-06
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2011-04-28
      • 2012-06-01
      相关资源
      最近更新 更多