【发布时间】:2023-04-05 17:56:01
【问题描述】:
我们刚刚注意到所有 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 开发工具,症结似乎是有问题的页面的响应标头为:
Content-Type:text/html;charset=ISO-8859-1
大多数页面都有正确的响应标题:
Content-Type:text/html;charset=utf-8
我们所有的“显示”、“索引”和“列表”页面都使用 ISO-8859-1,我们所有的“编辑”gsp 页面都使用正确的 UTF-8。
但是,当我们查看 GPS 和控制器时,代码是相同的。
如果我们对项目进行 ISO-8859-1 的全局搜索,我们只会在 web.xml 中找到 sitemesh 的条目。我们不知道这是否相关。
由于有效的 GSP 和无效的 GSP 之间实际上没有区别,控制器方法也没有任何区别,我们不知道如何修复 grails 使用的字符集它的响应头。
纯脚手架页面(空控制器)有完全相同的问题 - show 设置了错误的字符并将 UTF-8 字符显示为“?”,但可以编辑。
有什么想法吗?
【问题讨论】: