【发布时间】:2012-09-24 11:41:45
【问题描述】:
我对 Grails 应用程序有以下配置:
Grails 1.3.7
在 config.groovy 文件中设置以下内容grails.views.default.codec="none"grails.views.gsp.encoding="UTF-8"grails.converters.encoding="UTF-8"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 字符打印到控制台不一定能正常工作,具体取决于您的操作系统。
-
我只是
printlnparams地图。我使用 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