将非英国字符从 GSP 编码到控制器的 Grails



我有一个Grails(2.0.4)应用程序,所有这些都设置为管理UTF-8编码(布局中的元标记,mysql数据库表)。不幸的是,奇怪的事情发生了。

例如,如果在表单(以创建域实例)中键入任何包含非英国字符的文本,如下所示:

más que nada

POST 包含确切的文本(按原样带有"á"字符),但控制器中的 params 变量包含错误的文本:

más que nada

视图和控制器之间没有任何内容,这怎么会发生?

我也尝试在 Config.groovy 中进行设置,但没有很好的结果:

grails.views.default.codec = "html"

我是否还缺少其他需要设置的内容?

提前感谢所有花时间研究这个问题的人。

Config.groovy 中的这些值怎么样:

grails.views.default.codec = "none"
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"

这些配置是否正确?

在生产中,我已经在服务器中配置了我的 tomcat 6.xml作为

<Connector port="14080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="14443" URIEncoding="UTF-8"/>最重要的一条线是URIEncoding="UTF-8"

MySQL 数据库的默认字符集是什么?可以吗?

这是我创建MySQL数据库的方式:

create database [dbname] DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE utf8_swedish_ci;

有关创建数据库的完整语法,请参阅 http://dev.mysql.com/doc/refman/5.5/en/create-database.html

排序

规则会影响排序。您可以在 mysql 中获取带有"show collation"sql 语句的列表。http://dev.mysql.com/doc/refman/5.1/en/show-collation.html

更改现有表的编码是使用以下命令完成的:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name];

您可以使用"显示创建表tbl_name"命令检查现有表的编码。更改数据库的默认编码不会更改现有表(或从 mysql 转储导入的表)的编码。

你已经尝试过了吗

${myHtmlContent.encodeAsHtml()}

在您看来?

好吧,这篇文章已经有几个月了,OP可能已经找到了更好的解决方案。但是,我设法解决此问题的另一种方法是显式更改相关参数的字符编码。

例如,params.paramsname = new String(params.unicodeInput.getBytes("8859_1"), "UTF8");

这将强制将paramsname正确解码为 Unicode 字符。

我刚刚遇到了这个问题,只是为了提醒您这只是一种解决方法。我也在寻找更好的解决方案。加油!

对不起,我几天前就弄清楚了问题所在,但直到现在我还没有时间回答我自己的问题。

不幸的是,我忘了提到问题的关键部分,因为我认为它无关。我只在 AJAX 调用时遇到了编码问题,我没有提到它,因为我的应用程序中的所有节省都是通过 AJAX 完成的。

因此,编码问题与jQuery帖子的内容类型配置有关,该内容类型(要与UTF-8正常工作)必须如下所示:

contentType: "application/x-www-form-urlencoded;charset=UTF-8"

最新更新