5

私の grails アプリでは、Unicode 文字が正しくエンコードされていません。

grails 1.3.7 と tomcat 7.0.22 を使用しています。以下は、ユニコードをサポートするためにアプリで構成した設定です。

- 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.

それでも、Unicode 文字を送信すると、grails はその文字をサポートしておらず、文字化けした値が保存されています。私はグーグルで検索し、この同じ問題について助けを求めるpplを読みましたが、残念ながら解決策は私の好意では機能しません. ただし、この問題の回避策を見つけました。次の式

params.detail = params.detail ? new String(params.detail.getBytes("8859_1"), "UTF8") : null

Unicode 文字を正しくエンコードします。

ただし、アプリのすべてのテキスト入力に対してこれを行う必要があるため、このアプローチを使用するのは面倒です。grails や tomcat で Unicode 文字が正しくエンコードされないのはなぜですか? 私は正しい設定を持っていると思います。

4

2 に答える 2

6

Mysqlを使用していないが、デフォルトで出荷されているHSqlDBを使用している場合、エンコーディングの問題は発生しません。この問題は、Mysql、InnoDB、およびUTF-8が原因で発生します。

Mysql接続を使用していて、すでに useUnicode=true&characterEncoding=UTF-8MySql接続URLに設定しているため

InnoDBとUTF-8用に特別な休止状態の方言を追加する必要があります。

Datasource.groovy含まれている必要があります:

environments {
    development {
        dataSource {         
            ......
            driverClassName = "com.mysql.jdbc.Driver"
            dialect = "com.domain.mysql.dialect.MySQLUTF8InnoDBDialect"
            .....

で新しいファイルを作成します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";
    }
}

あなたが持っていることを確認してくださいConfig.groovy

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

そして、views / layouts/main.gspは次のように始まります。

<%@ page contentType="text/html;charset=UTF-8" %>

挨拶、

1月

于 2012-05-09T12:15:04.903 に答える
2

Dialect を UTF-8 に設定しても機能しません。UTF-8 をサポートするには、テーブルまたはテーブルの列も変更する必要があります。

テーブルを変更するコマンドは次のとおりです

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

または、utf-8 を保存する列を変更することもできます

コマンドを使用して

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;
于 2012-05-11T01:06:02.300 に答える