2012-08-10 42 views
0

我已经有了一个Grails(2.0.4)应用程序,所有这些应用程序都设置为管理UTF-8编码(布局中的元标记,mysql数据库表)。不幸的是,发生了一些奇怪的事Grails将从GSP到控制器的非英国字符编码

例如,如果在一个形式(以创建一个域实例)I型含非英国字符的文本,例如:

más que nada

的POST包含准确的文本(带有“ ”字符为是),但在控制器中的PARAMS变量包含了错误的文字:

más que nada

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

我也试过,没有很好的效果,在Config.groovy中设置:

grails.views.default.codec = "html" 

有别的我失踪设置?

在此先感谢大家花时间看看这个问题。

回答

0

对不起,我想通了什么问题了天前,但我没有时间来回答我的问题到现在。

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

因此,编码问题涉及到的内容类型jQuery的岗位,这(与UTF-8正常工作)的配置已经是这样的:

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

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

+0

如何配置它进入Grails应用程序?对于我的开发环境,我在IDE中运行应用程序,并且没有任何server.xml来设置。 – lucke84 2012-08-10 15:49:00

+0

试试这个(http://roshandawrani.wordpress.com/2011/03/13/grails-tip-configuring-embedded-tomcat-instance-used-in-developmenttest-env/),让我知道 – 2012-08-10 16:37:27

0

什么是你的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为CREATE DATABASE

整理会影响排序的完整语法。您可以在mysql中使用“show collat​​ion”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转储中导入的表)的编码。

+0

Woops,我应该已经读过你的问题,它甚至没有来到控制器... – 2012-08-10 15:54:04

+0

没问题的人。想再试一次吗? :) – lucke84 2012-08-10 16:23:16

0

你已经与

${myHtmlContent.encodeAsHtml()} 
在您看来

试试?

+0

我还没有编码的价值,想象一个空的输入文本提交或textarea,填写并通过表单POST发送到控制器。 – lucke84 2012-08-10 16:53:18

1

如何将这些值在Config.groovy中:

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

是那些配置是否正确?

+0

是的,这些设置与我的完全一样。 – lucke84 2012-08-13 08:48:52

+0

什么版本的Grails? – 2012-08-13 12:11:23

+0

该版本是2.0.4 – lucke84 2012-08-13 12:54:14

0

那么这个帖子是几个月前,OP可能会找到一个更好的解决方案。但是,我已经管理的这个问题的另一种解决方案是显式更改所关注参数的字符编码。

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

这将迫使paramsname被正确解码为Unicode字符。

我刚刚遇到了这个问题,只是为了提醒你,这只是一个解决方法。我仍然在寻找更好的解决方案。 cheerzzz!