Pregunta

Estoy desarrollando una aplicación que debería funcionar en diferentes idiomas (alemán, español, etc.). La aplicación utiliza una base de datos Oracle. Tengo procesos de negocios CRUD y tengo las vistas estándar (crear, editar, mostrar, listar). No hay problemas para crear, mostrar y enumerar cualquier registro que contenga caracteres especiales como & # 228;, & # 246;, & # 252 ;, etc. Pero cuando edito cualquier entrada que contenga alguno de estos caracteres, obtengo el código codificado. versión. es decir     &erio; auml; en lugar de & # 228;     &erio; ouml; en lugar de & # 246;     &erio; uuml; en lugar de & # 252;

y así sucesivamente.

¿Alguna sugerencia de cómo resolver este problema?

¡Gracias!

ACTUALIZACIÓN Gracias por tu ayuda. Describiré el escenario completo:

Tengo una aplicación web escrita en grails (groovy on grails). Para el desarrollo estoy usando Jetty como servidor y Oracle 10g. Para pruebas y producción estoy usando Tomcat 6.0.18 y Oracle 10g La versión de Java es 1.6.0_02

Tengo muchos procesos CRUD (crear, recuperar, actualizar, eliminar). La aplicación es multilenguaje. Es decir, & # 228 ;, & # 246 ;, & # 252 ;, & # 223 ;, & # 225 ;, & # 233 ;, & # 237 ;, & # 243 ;, & # 250; las letras (caracteres) deben estar permitidas como contenido.

Las vistas están escritas en gsp. Estoy usando vistas .gsp estándar (crear, editar, mostrar, listar). No hay problema con crear, mostrar, listar. Es decir, si debajo de la vista crear escribo Cualquier palabra que use estos caracteres especiales, entonces esto será mostrado o listado correctamente debajo de show.gsp o list.gsp

El problema surge cuando se edita un registro que contiene dichos caracteres. En lugar de, digamos que -digo- & # 228; aparece en el campo y & amp; auml; (esta es la codificación html de & # 228;).

Tengo la siguiente configuración:

bajo Config.groovy     grails.views.gsp.encoding = " UTF-8 "     grails.converters.encoding = " UTF-8 "

Cada página .gsp tiene la siguiente etiqueta meta:

 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" pageEncoding="UTF-8"/>

Cada formulario tiene el siguiente atributo:

<g:form accept-charset="UTF-8" method="post" >

Bajo Tomcat hice las siguientes configuraciones.

Tomcat se inicia con las siguientes opciones:

CATALINA_OPTS=-Dfile.encoding=UTF-8
JAVA_OPTS="-Duser.language=de -Duser.country=DE"

En web.xml establezco el siguiente filtro

 <filter>
   <filter-name>SetCharacterEncoding</filter-name>
   <filter-class>filters.SetCharacterEncodingFilter</filter-class>
   <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
   </init-param>
 </filter>

Bajo myApplication / WEB-INF / classes / filters copié el SetCharacterEncodingFilter.class de examples / WEB-INF / classes / filters

Bajo server.xml establezco el siguiente conector:

 <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="UTF-8" />

El escenario es el siguiente: el servidor recibe una solicitud para editar un formulario. El servidor está recuperando la información de la base de datos y luego la base de datos está enviando la información ya está codificada en html (no lo creo) o el servidor está codificando y enviándolo codificado al cliente.

Además, en mi controlador puedo ver que la información recuperada del servidor no es html codificado.

No sé qué configuración se debe hacer para solucionar este problema de codificación (lo que me está llevando mucho, mucho tiempo y esfuerzo).

Muchas gracias de antemano.

Luis

¿Fue útil?

Solución 2

Además de todos los ajustes ya realizados. He establecido:

grails.views.default.codec="html" // none, html, base64

en lugar de ninguno y el problema está resuelto.

Mi problema ya se expuso aquí: http: // www. groovy-forum.de/read.php?3,5008,5630

Para más información vea:

http://jira.codehaus.org/browse/GRAILS-1827

Luis

Otros consejos

La codificación

es un problema difícil porque no siempre puedes confiar en lo que ves. Por lo general, usar utf-8 es suficiente para resolver el problema. Sin embargo, asegúrese de usarlo en todas partes: servidor oracle, cliente oracle (jdbc), archivos geniales, etc. Tenga en cuenta que java usa utf-16. El controlador jdbc debería hacer esta conversión por usted. El mejor consejo para dar es que Java (y, por lo tanto, genial) hace exactamente lo que dicen que hacen cuando se trata de la codificación de caracteres, por lo que el problema no está ahí. Asegúrese de tener herramientas que le permitan examinar los bits reales (valor hexadecimal) para cada aspecto del sistema. En mysql - es solo hexadecimal http://dev.mysql.com/doc/ refman / 5.0 / es / string-functions.html # function_hex .
Asumo que el oráculo tiene una función similar. Nuevamente, asegúrese de que su cliente esté configurado para usar utf-8. Me quemé por eso antes. Para examinar los archivos de origen (o archivos de registro) use algo como xxd u od. Si está utilizando cygwin, asegúrese de activar utf8 (en el menú de fuentes vt). Si estás en Windows y no estás usando Cygwin, definitivamente deberías probarlo (asegúrate de usar la versión x).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top