2009-09-10 7 views
0

Je suis en train de développer une application qui devrait fonctionner dans différentes langues (allemand, espagnol, etc.). L'application utilise une base de données Oracle. J'ai des processus d'affaires CRUD et j'ai les vues standard (créer, éditer, montrer, liste). Aucun problème pour créer, afficher et répertorier tout enregistrement contenant des caractères spéciaux comme ä, ö, ü, etc. Mais lorsque j'édite une entrée contenant un de ces caractères, je reçois la version codée . c'est-à-dire & auml; au lieu de ä & ouml; au lieu de & uuml; au lieu deProblème de codage sous Groovy

et ainsi de suite.

Un indice pour résoudre ce problème?

Merci!

MISE À JOUR Merci pour votre aide. Je vais décrire le scénario complet:

J'ai une application web écrite en grails (groovy on grails). Pour le développement, j'utilise Jetty comme serveur et Oracle 10g. Pour tester et produire j'utilise Tomcat 6.0.18 et Oracle 10g La version Java est 1.6.0_02

J'ai beaucoup de processus CRUD (créer, extraire, mettre à jour, supprimer). L'application est multilingue. C'est-à-dire que les lettres (caractères) doivent être autorisées en tant que contenu.

Les vues sont écrites en gsp. J'utilise les vues .gsp standard (créer, éditer, montrer, liste). Pas de problème avec créer, montrer, liste. Autrement dit, si sous la vue de créer de type I un mot à l'aide des caractères spéciaux, alors ce sera affiché ou cotées correctement sous la show.gsp ou list.gsp

Le problème se pose lors de la modification d'un enregistrement contenant ces caractères. Au lieu de -l'on dit-ä apparaît dans le champ un & auml; (Ceci est l'encodage html de ä).

J'ai les paramètres suivants:

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

Chaque. la page gsp a la balise meta suivante:

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

Chaque forme a l'attribut suivant:

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

Sous Tomcat, j'ai effectué les réglages suivants.

tomcat est démarré avec les options suivantes:

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

Sous web.xml Je mis le filtre suivant

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

Sous monApplication/WEB-INF/classes/filtres je copiais le SetCharacterEncodingFilter.class d'exemples/WEB-INF/classes/filtres

Sous server.xml I a fixé les connecteur suivant:

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

Le scénario est le suivant: Le serveur reçoit une demande d'édition d'un formulaire. Le serveur récupère les informations de la base de données et puis la base de données envoie l'information déjà codée en HTML (je ne pense pas) ou le serveur l'encodage et l'envoie codé au client.

En outre, à mon contrôleur, je peux voir que les informations récupérées à partir du serveur n'est pas html codé.

Je ne sais pas quel paramètre doit être fait pour faire face à ce problème d'encodage (ce qui me prend beaucoup, beaucoup de temps et d'efforts).

Merci beaucoup d'avance.

Luis

+0

Si vous plus sur le Elaboré problème spécifique, je peux être en mesure d'aider. "lorsque je modifie une entrée contenant un de ces caractères je suis" que voulez-vous dire par là? Modifier comment? Est-ce un webui? Si c'est le cas, assurez-vous d'utiliser également utf-8. http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletRequest.html#setCharacterEncoding(java.lang.String) http://java.sun.com/javaee/ 5/docs/api/javax/servlet/ServletResponse.html # setCharacterEncoding (java.lang.Chaîne) Ces deux paramètres peuvent également être configurés dans votre conteneur. – andersonbd1

Répondre

1

Outre tous les réglages déjà effectués. J'ai mis:

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

au lieu de aucun et le problème est résolu.

Mon problème était déjà exposé ici: http://www.groovy-forum.de/read.php?3,5008,5630

Pour plus d'informations, voir:

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

Luis

1

encodage est un problème difficile parce que vous ne pouvez pas toujours faire confiance à ce que vous voyez. Habituellement, utf-8 est suffisant pour résoudre le problème. Assurez-vous de l'utiliser partout, par exemple - serveur Oracle, client Oracle (jdbc), fichiers groovy, etc. Sachez que Java utilise utf-16. Le pilote jdbc devrait faire cette conversion pour vous. Le meilleur conseil à donner est que java (et donc groovy) fait exactement ce qu'il dit quand il s'agit de l'encodage de caractères, donc le problème n'est pas là. Assurez-vous d'avoir des outils qui vous permettent d'examiner les bits réels (valeur hexadécimale) pour chaque aspect du système. Dans mysql - c'est juste hexadécimal: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex.
Je suppose que Oracle a une fonction similaire. Vérifiez à nouveau que votre client est configuré pour utiliser utf-8. J'ai été brûlé par ça avant. Pour examiner les fichiers sources (ou les fichiers journaux), utilisez quelque chose comme xxd ou od. Si vous utilisez cygwin, assurez-vous d'activer utf8 (dans le menu vt fonts). Si vous êtes sur Windows et n'utilisez pas cygwin, vous devriez certainement le prendre pour un tour (assurez-vous d'utiliser la version x).

+0

Je développe sous windows, testin et l'intégration sous ubuntu et l'environnement de production est suse enterprise linux. DB est oracle 10.xx. Le problème apparaît sous les trois environnements. Je pensais que c'était seulement un problème de fenêtres, mais non. C'est partout. En tout cas, merci pour vos conseils. Je vais le prendre en considération. +1 – Luixv