2010-08-19 11 views
0

J'ai un problème avec le formulaire Tapestry. Ma base de données XML est très sensible à l'encodage et nécessite utf-8.Formulaire de codage dans Tapisserie

Lorsque je place le caractère 'à' dans mon formulaire, la tapisserie reçoit 'Ó' et mon noyau reçoit une erreur: Octet 2 de séquence UTF-8 de 3 octets invalide.

Je n'ai pas le problème en éclipse avec la configuration par défaut locale pour tomcat.

Mais quelle que soit la configuration de tomcat, je pense que mon application doit faire la conversion elle-même.

Alors je tente:

  • charset = "utf-8" en forme => FAIL
  • buildUtf8Filter dans AppModule => FAIL

Le jeu de caractères de chaque page est toujours UTF- 8. Alors, que puis-je faire avant d'utiliser l'encodeur java Charset?

Merci de votre aide. :)

Répondre

0

Le problème concernait le jeu de caractères par défaut de la JVM lancée dans Windows Shell. Il a causé des problèmes avec FileWriter puis montrer mauvais caractère dans la console :)

+0

Ah, vous écriviez des choses dans des fichiers. Cela aurait pu être une information utile. De toute façon, oui, vous ne devriez jamais utiliser les lecteurs et les écrivains sans spécifier explicitement le jeu de caractères. La plate-forme par défaut est rarement ce que vous voulez. – Henning

+0

Oui, j'écrivais des choses à classer. Mais cette partie du code n'est pas à moi. Toujours vérifier le code qu'un compagnon vous donne :(merci de m'aider quand même;) – alex

1

Je ne pense pas que quelque chose ne va pas avec votre application. La tapisserie fait tout en UTF-8 par défaut; cette page wiki est assez obsolète (en référence à la bêta 5.0.5, où apparemment les formulaires avec uploads de fichiers n'utilisaient pas correctement UTF-8).

Vous dites que vous n'avez pas de problème localement. Avez-vous essayé de courir sur un serveur différent? Si vous ne rencontrez pas le problème, il y a probablement un problème avec les paramètres de page de code du système d'exploitation sur le serveur.

preuves anecdotiques ci-dessous Purement

J'ai eu une fois un caractère similaire problème posé dans une application Tapestry 5 sur le serveur de production (sous SUSE Linux) que je ne pouvais pas reproduire sur un autre serveur. Tout semblait aller bien avec l'application, le serveur Tomcat et les paramètres de page de code du système, mais les données POST finiraient décodées comme ISO 8859-1 au lieu de UTF-8 dans l'application. L'application avait fonctionné sur ce serveur pendant un an avant que le problème ne se manifeste - peut-être à travers une mise à jour du système d'exploitation. Après un jour de ne pas aller nulle part, nous avons fini par réinstaller tout le système d'exploitation du serveur, et tout allait bien à nouveau.

+0

Voici un test litte: chaîne stringUTF8 = new String; (client.getName() getBytes(), "UTF-8".) logger.info ("charset utf8:" + stringUTF8); String stringISO = new Chaîne (client.getName(). GetBytes(), "ISO-8859-1"); \t \t \t \t \t logger.info ("jeu de caractères ISO-8859-1:" + chaîneISO); et le résultat de 'à': jeu de caractères utf8:? charset ISO-8859-1: Ó Les fenêtres commande shell où je lance le serveur a un problème charset aussi: é => Ú Charset pourrait être réglé sur CP850? – alex

+0

Wow, non, c'est totalement confus. Faire 'String.getBytes()' transforme la chaîne (qui est en Unicode en Java) en un tableau d'octets * dans l'encodage par défaut de la plate-forme *. Pourrait être CP850, pourrait être n'importe quoi. Faire un nouveau 'String (bytes, charset)' crée une nouvelle chaîne à partir de ce tableau d'octets, en utilisant charset comme jeu de caractères lors de la lecture du tableau d'octets dans une représentation Unicode. Sauf si votre jeu de caractères par défaut est le même que le paramètre 'charset', cela ne peut jamais fonctionner. Lorsque vous imprimez 'client.getName()' sur la console ou l'inspectez dans le débogueur, voyez-vous les caractères appropriés? – Henning

+0

En console eclipse: 'à' => 'à' + OK dans la base de données Dans tomcat + windows shell: 'à' => 'Ó' + erreur Est-ce que l'interpréteur de commandes Windows peut changer le jeu de caractères defautl de tomcat? – alex