2010-04-24 6 views
1

Bonjour Je construis une application Web Spring MVC qui fonctionne sur Tomcat 6.0.20 et JDK 1.6.0_19. Lorsque j'envoie des caractères spéciaux via un formulaire HTML, certains d'entre eux sont stockés sous forme de points d'interrogation?Incongruence de caractères spéciaux

Par exemple, ces symboles sont stockés correctement: €, á, é, í, ‰, etc Mais certains symboles sont remplacés par? comme: ₤, ♪, ☺

Les tables MySQL charset est utf-8. Mon jsp également utiliser utf-8

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

J'ai inclus org.springframework.web.filter.CharacterEncodingFilter dans web.xml comme suggéré here

Lorsque je déboguer la requête POST lors de l'envoi 3 caractères € par ₤ avec firebug je reçois:% E2% 82% ACa% E2% 82% A4 ce qui est correct puisque E2 82 AC est le code pour € et E2 82 A4 est le code pour ₤ mais ₤ est stocké comme? dans la base de données. Lorsque je sauvegarde ₤ directement dans la base de données, il s'affiche correctement sur la page Web.

Comment puis-je résoudre ce problème?

Répondre

2

Il existe plusieurs domaines dans lesquels vous devez vérifier que l'encodage de caractères est effectué correctement par défaut sur UTF-8 et pas sur d'autres (par exemple, iso-8859-1). Vérifier:

  • JDBC pilote
  • Java Virtual Machine (ne peut analyser à base latin et unicode - peut fonctionner native2ascii pour convertir des caractères non latins à unicode)
  • Base de données de codage
  • Tomcat/JBoss, etc (serveur)
  • navigateur
  • système d'exploitation

Il C'est une douleur dans le cou d'avoir à vérifier toutes ces choses, mais quelqu'un doit le faire. Je vous recommande de tout UTF-8 qui est généralement ce que les gens sont d'accord sur

Pour moi, cela ressemble à la machine virtuelle Java ou votre pilote JDBC pourrait être la source du problème

+0

Merci pour votre problème de configuration JDBC. J'ai ajouté ceci à l'URL de connexion: useUnicode = true & characterEncoding = UTF8 et maintenant cela fonctionne. – Enrique

2

Première impression ces personnages à un UTF- 8 stdout capable. Si elles ne vous conviennent pas, vous devez définir le codage de la requête HTTP. Si elles semblent correctes, le problème est en effet dans la couche d'accès aux données. Utilisez un outil de gestion de base de données indépendant pour insérer et réviser manuellement ces caractères. Si elles ne semblent pas correctes, vous devez définir le codage DB (et table!). Si elles semblent correctes, le problème se situe dans le pilote JDBC/connectionstring. Vérifiez également si la version du pilote JDBC correspond à la base de données et est la dernière disponible.

Vous trouverez plus d'informations générales, des explications pratiques et des solutions détaillées dans this article.