我有一个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"