在我的 grails 应用程序中,unicode 字符没有正确编码。
我正在使用 grails 1.3.7 和 tomcat 7.0.22。以下是我在我的应用程序中为 unicode 支持配置的设置:
- Set grails.views.gsp.encoding and grails.converters.encoding="UTF-8" in Config.groovy
- Set encoding to UTF-8 in meta tag in the .gsp pages
- Specified 'useUnicode=true&characterEncoding=UTF-8' to the MySql connection URL (DB has characterset set to UTF-8)
- Set URIEncoding="UTF-8" useBodyEncodingForURI="true" to the server.xml file in tomcat
- Specified the attribute accept-charset="UTF-8" of the form tag.
Run Code Online (Sandbox Code Playgroud)
但是,当我提交一个 unicode 字符时,grails 不支持该字符并且正在保存乱码值。我已经用谷歌搜索并阅读了 ppl 在同一问题上寻求帮助,但不幸的是,这些解决方案对我不利。尽管如此,我已经找到了解决此问题的方法。下面的表达式
params.detail = params.detail ? new String(params.detail.getBytes("8859_1"), "UTF8") : null
Run Code Online (Sandbox Code Playgroud)
将正确编码 unicode 字符。
但是,使用这种方法很乏味,因为我必须对应用程序中的所有文本输入执行此操作。为什么 unicode 字符没有被 grails 和/或 tomcat 正确编码?我想我有正确的设置。
如果您使用的不是 Mysql 而是默认提供的 HSqlDB,您将不会看到编码问题。问题是由 Mysql、InnoDB 和 UTF-8 引起的。
由于您使用的是 Mysql 连接并且已经设置
useUnicode=true&characterEncoding=UTF-8为 MySql 连接 URL
你仍然需要为 InnoDB 和 UTF-8 添加一个特殊的休眠方言:
Datasource.groovy 应包含:
environments {
development {
dataSource {
......
driverClassName = "com.mysql.jdbc.Driver"
dialect = "com.domain.mysql.dialect.MySQLUTF8InnoDBDialect"
.....
Run Code Online (Sandbox Code Playgroud)
在中创建一个新文件 src/java/com/domain/mysql/dialect/MySQLUTF8InnoDBDialect.java
package com.domain.mysql.dialect;
import org.hibernate.dialect.MySQLInnoDBDialect;
/**
* Sets the default charset to UTF-8.
*/
public class MySQLUTF8InnoDBDialect extends MySQLInnoDBDialect {
@Override
public String getTableTypeString() {
return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
}
}
Run Code Online (Sandbox Code Playgroud)
确保你Config.groovy有:
grails.views.default.codec = "html"
grails.views.gsp.encoding = "UTF-8"
grails.converters.encoding = "UTF-8"
Run Code Online (Sandbox Code Playgroud)
您的 views/layouts/main.gsp 以:
<%@ page contentType="text/html;charset=UTF-8" %>
Run Code Online (Sandbox Code Playgroud)
问候,
简
| 归档时间: |
|
| 查看次数: |
11856 次 |
| 最近记录: |