我有一个 Grails 应用程序的以下配置:
然后,在任何输入框中输入 Unicode 字符并提交表单,检查关联控制器中的参数转储,看到 Unicode 字符被乱码了。使用 Firebug 检查浏览器请求服务器时,显示 Unicode 字符被正确地编码并提交到服务器。
但是仍然可以这样做:
谢谢!!
编辑: 我创建了一个具有相同配置的演示应用程序,一切都正常。这个问题只存在于这个特定的应用程序中。可能是由于其他已安装的插件引起的吗?
打印
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
在server.xml文件中设置如下内容:
URIEncoding="UTF-8" useBodyEncodingForURI="true"
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。
println
了params
映射。我使用Ubuntu和STS进行开发,并且在ide控制台中显示unicode字符没有问题。正如我所提到的,手动更改参数的字符编码,例如params.unicodeInput = new String(params.unicodeInput.getBytes("8859_1"), "UTF8");
,然后打印解码后的字符会在控制台中呈现实际字符。 - dipess