0

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

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

más que nada

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

más que nada

视图和控制器之间什么都没有,怎么会这样呢?

我也尝试在 Config.groovy 中进行设置,但效果不佳:

grails.views.default.codec = "html"

还有什么我想设置的吗?

提前感谢所有愿意花时间查看此问题的人。

4

6 回答 6

1

Config.groovy 中的这些值如何:

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

那些配置正确吗?

于 2012-08-11T02:05:52.463 回答
0

在产品上,我在 server.xml 中将我的 tomcat 6 配置为
<Connector port="14080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="14443" URIEncoding="UTF-8"/>
最重要的一行是URIEncoding="UTF-8"

于 2012-08-10T15:27:28.423 回答
0

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

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

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

有关 CREATE DATABASE 的完整语法,请参见http://dev.mysql.com/doc/refman/5.5/en/create-database.html

排序规则影响排序。您可以在 mysql 中获取带有“显示排序规则”的 sql 语句的列表。http://dev.mysql.com/doc/refman/5.1/en/show-collat​​ion.html

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

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

您可以使用“show create table tbl_name”命令检查现有表的编码。更改数据库的默认编码不会更改现有表(或从 mysql 转储导入的表)的编码。

于 2012-08-10T15:50:16.547 回答
0

您是否已经尝试过

${myHtmlContent.encodeAsHtml()}

在你看来?

于 2012-08-10T16:32:25.600 回答
0

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

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

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

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

于 2012-09-26T09:11:07.337 回答
0

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

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

因此,编码问题与 jQuery post 的内容类型的配置有关,它(要与 UTF-8 一起正常工作)必须是这样的:

contentType: "application/x-www-form-urlencoded;charset=UTF-8"
于 2012-10-01T09:45:25.733 回答