【问题标题】:Grails not able to decode the unicode charactersGrails 无法解码 unicode 字符
【发布时间】:2012-09-24 11:41:45
【问题描述】:

我对 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
    在 tomcat 的 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 字符打印到控制台不一定能正常工作,具体取决于您的操作系统。
  • 我只是 println params 地图。我使用 Ubuntu 和 STS 进行开发,在 ide 控制台中显示 unicode 字符没有问题。正如我所提到的,手动更改 params.unicodeInput = new String(params.unicodeInput.getBytes("8859_1"), "UTF8"); 等参数的字符编码,然后将解码后的字符打印为控制台中的实际字符。
  • Tomcat 也有同样的问题(不过在 Jetty 中就像一个魅力)。试试这个:stackoverflow.com/questions/9179574/…
  • @lefty 实际上,在发布此帖子之前,我确实看到了您的帖子。我的插件和你的一样,只是我不使用 webxml 插件。而且我无法升级 Spring Security Core 插件。我的版本是 1.1.3。唉,我无法升级插件(我正在开发旧版应用程序,我无权进行此类升级。)。那么有什么想法吗?
  • 我也有同样的问题。出于某种原因,任何“显示”gsp/控制器方法都会显示“?”,但“编辑”总是显示正确的 UTF-8 字符。

标签: grails


【解决方案1】:

我不确定,但是当我遇到 Grails + Tomcat 的 unicode 问题时,我解决了这个问题,将以下参数添加到 Tomcat 的 setenv.sh: JAVA_OPTS="-Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8"

【讨论】:

    猜你喜欢
    • 2021-03-11
    • 2010-10-14
    • 2021-01-26
    • 2012-05-17
    • 2015-02-03
    • 2011-11-27
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多