grails unicode

Grails no codifica los caracteres Unicode adecuadamente



(2)

Configurar el dialecto a UTF-8 no va a funcionar. También debe modificar las tablas o las columnas de su tabla para admitir UTF-8.

Aquí está el comando para alterar la tabla

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

o puede intentar simplemente modificar la columna en la que desea almacenar utf-8

usando el comando

ALTER TABLE t MODIFY col1 CHAR(50) CHARACTER SET utf8;

En mi aplicación Grails, los caracteres Unicode no se codifican correctamente.

Estoy usando grails 1.3.7 y tomcat 7.0.22. A continuación se detallan las configuraciones que he configurado en mi aplicación para soporte 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.

Pero aún así, cuando presento un carácter unicode, Grails no admite el carácter y se guarda el valor ilegible. He buscado en Google y he leído gente pidiendo ayuda sobre este mismo tema, pero lamentablemente las soluciones no funcionan a mi favor. Aunque, he encontrado una solución a este problema. La siguiente expresión

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

codificará correctamente el carácter Unicode.

Sin embargo, usar este enfoque es tedioso ya que tendré que hacer esto con todas las entradas de texto en mi aplicación. ¿Por qué el carácter Unicode no está codificado correctamente por Grails y / o Tomcat? Creo que tengo la configuración correcta.


Si no está utilizando Mysql sino el HSqlDB que se envía como predeterminado, no verá los problemas de codificación. Los problemas ocurren debido a Mysql, InnoDB y UTF-8.

Dado que está utilizando una conexión Mysql y ya está configurando useUnicode=true&characterEncoding=UTF-8 en la URL de conexión MySql

aún tiene que agregar un dialecto de hibernación especial para InnoDB y UTF-8:

Datasource.groovy debe contener:

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

Crea un nuevo archivo en 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"; } }

Asegúrate de que Config.groovy tenga:

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

Y tus vistas / layouts / main.gsp comienzan con:

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

Saludos,

Ene