0 votes

Problème d'encodage sous Groovy

Je développe une application qui doit 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, modifier, afficher, liste). Aucun problème pour créer, afficher et lister tout enregistrement contenant des caractères spéciaux comme ä, ö, ü, etc. Mais lorsque je modifie une entrée contenant l'un de ces caractères, j'obtiens la version codée version encodée, c'est-à-dire & auml ; au lieu de ä & ouml ; au lieu de ö & uuml ; au lieu de ü

et ainsi de suite.

Avez-vous une idée de la façon de résoudre ce problème ?

Merci !

UPDATE 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 les tests et la production, j'utilise Tomcat 6.0.18 et Oracle 10g. La version de Java est 1.6.0_02.

J'ai de nombreux processus CRUD (créer, récupérer, mettre à jour, supprimer). L'application est multilingue. C'est-à-dire que les lettres (caractères) ä, ö, ü, ß, á, é, í, ó, ú lettres (caractères) doivent être autorisés comme contenu.

Les vues sont écrites en gsp. J'utilise des vues .gsp standard (create, edit, show, list). Aucun problème avec create, show, list. C'est à dire que si sous la vue create je tape un mot utilisant ces caractères spéciaux, il sera affiché ou listé. correctement dans les vues show.gsp ou list.gsp.

Le problème se pose lors de l'édition d'un enregistrement contenant de tels caractères. Au lieu de -disons- ä apparaît dans le champ an & auml ; (c'est l'encodage html de ä).

J'ai les paramètres suivants :

sous Config.groovy grails.views.gsp.encoding="UTF-8" (en anglais) grails.converters.encoding="UTF-8" (en anglais)

Chaque page .gsp possède la balise méta suivante :

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

Chaque formulaire possède 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 j'ai 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 myApplication/WEB-INF/classes/filters, j'ai copié la classe SetCharacterEncodingFilter.class depuis examples/WEB-INF/classes/filters.

Sous server.xml, j'ai défini le 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 de modification d'un formulaire. Le serveur récupère les informations de la base de données et ensuite, soit la base de données envoie l'information déjà codée en html (je ne pense pas) ou le serveur la code et l'envoie et l'envoie codée au client.

De plus, au niveau de mon contrôleur, je peux voir que l'information récupérée du serveur n'est pas codées en html.

Je ne sais pas quel réglage il faut faire pour résoudre ce problème d'encodage (qui me prend beaucoup, beaucoup de temps et d'efforts). (qui me prend beaucoup, beaucoup de temps et d'efforts).

Merci beaucoup à l'avance.

Luis

1voto

andersonbd1 Points 1602

L'encodage est un problème difficile car vous ne pouvez pas toujours faire confiance à ce que vous voyez. En général, l'utilisation de utf-8 est suffisante pour résoudre le problème. Assurez-vous de l'utiliser partout, cependant - serveur oracle, client oracle (jdbc), fichiers groovy, etc. Sachez que java utilise utf-16. Le pilote jdbc devrait effectuer cette conversion pour vous. Le meilleur conseil à donner est que java (et donc groovy) font exactement ce qu'ils disent qu'ils font quand il s'agit du codage des 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 hex : http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_hex .
Je suppose que l'oracle a une fonction similaire. Encore une fois, assurez-vous que votre client est configuré pour utiliser utf-8. Je me suis déjà fait griller par cela. 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 sous Windows et que vous n'utilisez pas cygwin, vous devriez absolument l'essayer (assurez-vous d'utiliser la version x).

1voto

Luixv Points 3174

En plus de tous les réglages déjà effectués. J'ai réglé :

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

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

Mon problème a déjà été 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X