部署在 Tomcat6 上时的 Grails 1.3.7 UTF-8 问题

标签 grails utf-8 tomcat6

我正在尝试部署一个在 1.3.7 中创建的应用程序,它接收来自桌面应用程序的通知,并且根据用户的语言,将发送特定语言的“谢谢”电子邮件。电子邮件是使用 javamail MimeMessageHelper 从模板创建的,如下所示:

 MimeMessageHelper helper = new MimeMessageHelper(message, true, "UTF-8");
 helper.setFrom(new InternetAddress(config.td.mail.from.email,config.td.mail.from.text))
 helper.setTo((mailDetails.to) as String)
 helper.setSubject(config.td.mail.from.regSubject)
 helper.setText(buildRegBody(mailTemplate, mailDetails), true)

实际的 mailTemplate 文件都以 UTF-8 编码。在本地运行应用程序时,发送的电子邮件没有任何错误,但在部署到 Tomcat 时,电子邮件文本中的任何国际字符都将替换为:������。在使用正确的 UTF-8 排序规则将国际字符写入 MySQL 数据库时,我遇到了类似的问题。

我的配置文件包括以下行:
grails.views.default.codec = "none"
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"

我尝试了以下方法无济于事:
  • 向 Tomcat 服务器 xml 中的连接器元素添加了 UTF-8 编码语句
  • 确保 charEncodingFilter 在 web.xml
  • 的链中排在第一位
  • 使用参数创建了我的生产 war :'-Dfile.encoding=UTF-8 war'

  • 这些似乎解决了大多数其他用户的问题,现在我已经没有想法了 - 任何帮助或建议将不胜感激。

    最佳答案

    “buildRegBody 是做什么的?你能发布代码吗?” Sergio,这是一种从模板构建电子邮件正文的小方法。

    Loteq,谢谢你的建议。我确实对所有文件进行了正确编码,并且将 Tomcat 设置为将文件编码为 UTF-8。
    问题在于运行 Tomcat 的 JAVA。通过添加解决:

    -Dfile.encoding=UTF-8

    到 Catalina.sh 的“JAVA OPTS”或/etc/init.d/Tomcat 脚本(取决于您的环境)以及在 Tomcat 服务器 xml 的连接器元素中设置编码语句(见上文)。
    我希望这可以避免其他人引起我的头痛!

    关于部署在 Tomcat6 上时的 Grails 1.3.7 UTF-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12140362/

    相关文章:

    grails - 标准的单元测试模拟

    grails - 未配置 javascript 提供程序

    Nginx 大流量负载均衡

    tomcat - 作为服务运行的多个 Tomcat 实例

    grails - 如何为生产服务器中的grails应用程序设置新的自定义环境?

    grails - 防止保留未使用的数据库连接

    mysql - UTF-8字符有问题;我看到的不是我存储的

    php - iconv UTF-8//忽略仍然产生 "illegal character"错误

    ruby-on-rails - 如何为 UTF-8 字符串编写带有大引号的 gsub?

    java - Spring AOP - 实现 spring aop 时不调用服务方法