我们刚刚注意到,所有的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
大多数页面的正确响应 header 为:
Content-Type:text/html;charset=utf-8
我们所有的“显示”,“索引”和“列表”页面均具有ISO-8859-1,而我们所有的“edit” gsp页面均具有正确的UTF-8。
但是,当我们查看GPS和 Controller 时,代码是相同的。
如果我们在项目上进行ISO-8859-1的全局搜索,则只能在web.xml中找到sitemesh的条目。我们不知道这是否相关。
由于实际上可以工作的GSP与不能工作的GSP之间没有区别, Controller 方法也没有任何区别,所以我们无所适从地知道如何修复grails用作其响应 header 的字符集。
纯脚手架页面(空 Controller )具有完全相同的问题-show具有错误的字符集,并且将UTF-8字符显示为“?”,但是编辑工作正常。
有任何想法吗?
最佳答案
解决方案是将其添加到每个 Controller :
def beforeInterceptor = {
response.characterEncoding = 'UTF-8'
}
显然,此问题已在grails 2.5.1中修复
https://jira.grails.org/browse/GRAILS-11830
关于grails - grails 2.5在 “UTF-8”页面中未显示 “show”字符,但在 “edit”中显示了正确的字符。 Grails使用了错误的字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441906/