Étrange personnage problème de codage avec Eclipse / Spring / Tomcat 6
J'ai été essayer des choses tous les jours, mais ne peut pas obtenir une bonne solution. Mon problème est: je suis en train d'élaborer un Spring MVC application basée dans mon local de Tomcat. Mon MySQl
de la base de données a UTF-8
codage de jeu, tout le contenu, il s'affiche correctement lors de l'utilisation de phpMyAdmin. Également la sortie dans les fichiers JOURNAUX à l'aide de log4j
dans catalina.travaux d'amende.
Mes pages JSP sont configurés par
<!-- encoding -->
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page pageEncoding="UTF-8" %>
Montre également des données sur ma page JSP, fonctionne très bien. Je peux également envoyer des données à partir de mon Contrôleur sans DB intereference à l'aide de caractères spéciaux, par exemple
String str = "UTF-8 Test: Ä Ö Ü ß è é â";
logger.debug(str);
mav.addObject("utftest", str);
Qui affiche correctement dans le journal et sur jsp page dans le navigateur.
MAIS: Lorsque des caractères spéciaux directement dans mon fichier JSP, par exemple pour le texte dans les en-têtes, cela ne fonctionne pas. FF et Google Chrome affichage étrange caractères, mais le rapport à la page en UTF-8. Lors de la commutation pour le Latin, caractères, juste de plus en plus étrange.
Même problème lors de l'affichage de texte jetons de mes messages.fichier de propriétés, bien qu'Eclipse dit que quand un clic-droit que l'UTF-8 est utilisé.
Je suis un peu perdu et ne sais pas où vérifier maintenant.
Résumé:
- DB de stockage est très bien
- DB sortie sur JSP est bien
- Sortie sur JSP directement de contrôleur est bien
- même la lecture dans les formulaires est très bien
- .les propriétés des fichiers et des JSP texte est pas bien !!!
Des idées? J'ai vraiment apprécier et conseils.
Vous devez vous connecter pour publier un commentaire.
La quête
J'ai exactement le même problème que le vôtre avec une configuration très similaire (Tomcat, Spring, Spring Web Flow, JSF2).
Peu de faits à propos de mes propres enquêtes:
<f:verbatim>&eacute;</f:verbatim>
.Toujours le problème après avoir vérifié tout mon code pour classique les conditions préalables et recommandations trouvées sur les forums:
<?xml version="1.0" encoding="UTF-8" ?>
au sommet de fichiers XML,<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
à l'intérieur d'en-tête HTML de même des fichiers,encoding="UTF-8"
dans<f:view>
.La configuration de Tomcat dans l'une des manières suivantes n'ont rien fait:
org.springframework.web.filter.CharacterEncodingFilter
sur et en dehors,aussi que (j'ai probablement manquer le point ici):
La clé
J'ai trouvé la solution en comparant les Tomcat ligne de commande entre la VP et de classique de ligne de commande MS-DOS lancement de Tomcat. La seule différence est le paramètre
-Dfile.encoding=UTF-8
. Il a été la clé pour moi de résoudre le problème.Set JAVA_OPTS=-Dfile.encoding="UTF-8" et il fonctionne très bien.
La (tentative de) explication
La seule explication que j'ai trouvé, Tomcat utilisation de la JVM de l'encodage qui est par défaut le système d'encodage (UTF-8 sur Linux, CP1252 sur Windows). Eclipse WTP force de la JVM de codage en fonction de son espace de travail les paramètres d'encodage. En passant de la JVM en UTF-8 donne la solution.
Je soupçonne que c'est pas vraiment la bonne et qu'il y a un problème de configuration sur ma pile ou sur les ressources de filtrage effectué soit par maven-ressources-plugin ou maven-guerre-plugin, mais je n'ai pas encore trouvé.
Vous avez besoin pour configurer Eclipse pour enregistrer les fichiers en UTF-8.
Aller à Fenêtre > Préférences, entrez le texte de filtre
encoding
en haut, d'explorer toutes les sections de mettre tout en UTF-8. Spécifiquement pour les fichiers JSP c'est dans Web > Fichiers JSP > Encodage de. Choisissez le premier UTF-8 option (appelé "ISO 10646/Unicode(UTF-8)").Pour les fichiers de propriétés c'est une histoire à part. Conformément à la spécification, ils seront, par défaut, être lu comme ISO-8859-1. Vous avez besoin de native2ascii pour cela l'outil ou de la fourniture d'une coutume properfies fichier loader qui utilise l'UTF-8. Pour plus de détails, voir cet article.
Comme BalusC dit, vous devez enregistrer les fichiers au format utf-8.
Afin de résoudre votre problème de fichiers inclus, il suffit d'inclure l'en-tête
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
en haut de chaque fichier inclus. Cela indique à la servlet pour traiter le fichier en UTF-8, au lieu d'utiliser la valeur par défaut ISO-8859-1.
Je suis en utilisant Tomcat 7 avec le Printemps, les cadres et l'utilisation de
<jsp:include page="anyFile.html"/>
en JSP échouer et de me donner unjava.lang.IllegalStateException
. Le<jsp:include>
fonctionne très bien si je veux inclure un autre fichier JSP au lieu d'un fichier HTML statique, mais quand je suis en train d'injecter du code HTML statique fichier il donnez-moi cette exception en relation avec l'Encodage des Caractères.À l'aide de
<jsp:directive.include file="anyFile.html" />
ou<%@include file="anyFile.html"%>
fonctionne, mais tous les caractères spéciaux ("é", "è", "ç", etc.) apparaissent codés en ISO-8891 au lieu de UTF-8 même si le fichier JSP ont la<%@page contentType="text/html" pageEncoding="UTF-8"%>
et la<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
en elle.J'ai trouvé la solution en utilisant les JSLT de la bibliothèque de balises avec l'importation de la balise:
mettre dans la JSP:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
Puis obtenir le fichier HTML que je veux inclure l'utilisation de ce:
<c:import url="anyFile.html" charEncoding="UTF-8"/>
A vous pouvez voir la
import
tag de la JSLT bibliothèque ont uncharEncoding
attribut permet de définir le fichier html à l'encodage de Caractères approprié et d'afficher son contenu correctement.Pour les JSP, voir @BalusC.
Pour les fichiers de propriétés de voir: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Properties.html