我们刚刚注意到所有的UTF 8字符,例如£和€都是“?”在我们的grails应用程序中,但仅限于特定页面。我们检查了数据库(mysql 5.6),它们肯定是正确的UTF-8字符,例如这样做:
SELECT * FROM currency c
WHERE LENGTH(c.prefix) <> CHAR_LENGTH(c.prefix)
返回以£和€作为前缀的货币行(但不包含具有正常字符作为前缀的行
问题出现在Linux上的tomcat和从Windows 8上的Intellij 14中运行。
使用chrome dev工具,症结似乎是有问题的页面有一个响应头:
Content-Type:text/html;charset=ISO-8859-1
其中大多数页面都有正确的响应头:
Content-Type:text/html;charset=utf-8
我们所有的“show”,“index”和“list”页面都有ISO-8859-1,我们所有的“编辑”gsp页面都有正确的UTF-8。
但是,当我们查看GPS和控制器时,代码是相同的。
如果我们对ISO-8859-1的项目进行全局搜索,我们只在web.xml中找到sitemesh的条目。我们不知道这是否相关。
由于GSP的工作原理与没有的GSP之间没有区别,控制器方法也没有任何区别,因此我们不知道如何修复Grails用作charset的字符集。它的响应标题。
纯支架页面(空控制器)有完全相同的问题 - 显示错误的字符集并显示UTF-8字符为“?”,但编辑工作。
有什么想法吗?
答案 0 :(得分:0)
解决方案是将其添加到每个控制器:
def beforeInterceptor = {
response.characterEncoding = 'UTF-8'
}
显然这已在grails 2.5.1
中修复