Grails编码从GSP到控制器的非UK字符
我有一个Grails(2.0.4)应用程序,都是为了管理UTF-8编码而设置的(布局中的元标记,mysql数据库表)。不幸的是,发生了一些奇怪的事情 例如,如果在表单(创建域实例)中键入任何包含非UK字符的文本,如下所示:Grails编码从GSP到控制器的非UK字符,grails,encoding,utf-8,character-encoding,gsp,Grails,Encoding,Utf 8,Character Encoding,Gsp,我有一个Grails(2.0.4)应用程序,都是为了管理UTF-8编码而设置的(布局中的元标记,mysql数据库表)。不幸的是,发生了一些奇怪的事情 例如,如果在表单(创建域实例)中键入任何包含非UK字符的文本,如下所示: contentType: "application/x-www-form-urlencoded;charset=UTF-8" más que nada POST包含准确的文本(保留“á”字符),但控制器中的params变量包含错误的文本: mÃs que nada 视图和控
contentType: "application/x-www-form-urlencoded;charset=UTF-8"
más que nada
POST包含准确的文本(保留“á”字符),但控制器中的params变量包含错误的文本:
mÃs que nada
视图和控制器之间什么都没有,这怎么会发生呢
我还尝试在Config.groovy中设置,但没有取得好的效果:
grails.views.default.codec = "html"
grails.views.default.codec = "none"
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"
还有什么我没安排的吗
提前感谢所有愿意花时间查看此问题的人。在prod上,我已将我的tomcat 6在server.xml中配置为
最重要的一行是您的MySQL数据库的默认字符集是什么?可以吗 以下是我创建MySQL数据库的方式:
create database [dbname] DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE utf8_swedish_ci;
有关创建数据库的完整语法,请参见
排序规则影响排序。您可以在mysql中获得带有“show collation”sql语句的列表
使用以下命令更改现有表的编码:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name [COLLATE collation_name];
您可以使用“show create table tbl_name”命令检查现有表的编码。更改数据库的默认编码不会更改现有表(或从mysql转储导入的表)的编码。是否已尝试使用
${myHtmlContent.encodeAsHtml()}
在您看来?Config.groovy中的这些值如何:
grails.views.default.codec = "html"
grails.views.default.codec = "none"
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"
这些配置是否正确?这篇文章已经发布了几个月,OP可能已经找到了更好的解决方案。但我所管理的这个问题的另一个解决方案是显式地更改相关参数的字符编码 例如,
params.paramsname=newstring(params.unicodeInput.getBytes(“8859_1”),“UTF8”)代码>
这将强制将paramsname
正确解码为Unicode字符
我只是遇到了这个问题,只是想提醒你,这只是一个解决办法。我还在寻找更好的解决方案。干杯 对不起,几天前我就知道问题出在哪里了,但直到现在我还没有时间回答自己的问题
不幸的是,我忘了提到问题的一个关键部分,因为我不认为这是相关的。我只是在AJAX调用中遇到了编码问题,我没有提到它,因为我的应用程序中的所有节省都是通过AJAX实现的
因此,编码问题与jQuery post的内容类型的配置有关,为了正确使用UTF-8,必须如下所示:
contentType: "application/x-www-form-urlencoded;charset=UTF-8"
如何将其配置到grails应用程序中?对于我的开发环境,我在IDE中运行应用程序,但我没有任何server.xml要设置。请尝试此()并让我知道Woops,我应该已经阅读了您的问题,它甚至没有到达控制器…我还没有编码的值,想象一个空的输入文本字段或文本区域,填充并通过form POST发送到控制器。是的,这些设置与我的完全相同。