Grails无法解码Unicode字符。

3
我有一个 Grails 应用程序的以下配置:
  1. Grails 1.3.7
    在config.groovy文件中设置如下内容:
    grails.views.default.codec="none"
    grails.views.gsp.encoding="UTF-8"
    grails.converters.encoding="UTF-8"

  2. Tomcat 7.0.22
    在server.xml文件中设置如下内容:
    URIEncoding="UTF-8" useBodyEncodingForURI="true"

在我的 GSP 页面中,我已经设置了 charset=UTF-8,因为我想使用 UTF-8 字符编码。
然后,在任何输入框中输入 Unicode 字符并提交表单,检查关联控制器中的参数转储,看到 Unicode 字符被乱码了。使用 Firebug 检查浏览器请求服务器时,显示 Unicode 字符被正确地编码并提交到服务器。
但是仍然可以这样做: params.unicodeInput = new String(params.unicodeInput.getBytes("8859_1"), "UTF8"); Unicode 字符会被正确解码。我想知道为什么 Unicode 字符在常规浏览器请求中不能正确解码,尽管浏览器正确发送 Unicode 字符。
谢谢!!
编辑: 我创建了一个具有相同配置的演示应用程序,一切都正常。这个问题只存在于这个特定的应用程序中。可能是由于其他已安装的插件引起的吗?
打印 request.getCharacterEncoding()response.getCharacterEncoding() 都会输出 UTF-8。

当你说“参数转储”时,你具体是在做什么?将Unicode字符打印到控制台上并不一定会正确工作,这取决于你的操作系统。 - Ken Liu
我只是printlnparams映射。我使用Ubuntu和STS进行开发,并且在ide控制台中显示unicode字符没有问题。正如我所提到的,手动更改参数的字符编码,例如params.unicodeInput = new String(params.unicodeInput.getBytes("8859_1"), "UTF8");,然后打印解码后的字符会在控制台中呈现实际字符。 - dipess
在Tomcat中遇到了同样的问题(但在Jetty中却像魔法一样工作)。请尝试这个链接:https://dev59.com/PWDVa4cB1Zd3GeqPaSf2 - Lefteris Laskaridis
@lefty,实际上在发布这篇文章之前我已经看到了你的帖子。我的插件与你的相同,只是我没有使用webxml插件。而且我无法升级Spring Security Core插件。我的版本是1.1.3。可惜的是,我没有权限升级插件(我正在处理一个遗留应用程序,我没有进行此类升级的权限)。那么有什么想法吗? - dipess
我有同样的问题。由于某种原因,任何“show” gsp/controller方法都显示“?” ,但“edit”始终显示正确的UTF-8字符。 - John Little
1个回答

4

我不确定,但是当我在Grails + Tomcat中遇到Unicode问题时,通过向Tomcat的setenv.sh添加以下参数解决了该问题: JAVA_OPTS="-Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接