grails - grails 2.5在 “UTF-8”页面中未显示 “show”字符,但在 “edit”中显示了正确的字符。 Grails使用了错误的字符集

标签 grails utf-8

我们刚刚注意到,所有的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/

相关文章:

c++ - 如何判断 Windows 剪贴板上的文本是 C++ 中的 ISO 8859 还是 UTF-8?

grails - 在grails应用中,服务中的字段是否由用户共享?

来自服务的 Grails Spring Security 身份验证

C++ u8 literal char 覆盖

php - glob() 在 Windows 上找不到带有多字节字符的文件名?

Java 6 将 utf8 转换为 iso88591 字符集并忽略不可映射的字符

shell - 意外地用 sed 替换 &

hibernate - Hibernate Stateless Session批量插入关联实例的有效方法

grails - 在为 Grails 应用程序编写 Geb/Spock 测试时,您将如何封装用户的登录操作,以便可以在测试中重用它?

Grails 3.3.1 带有域对象参数的 Controller 操作 - 数据如何绑定(bind)?