10
votes

Freemarker codant de confusion

Lorsque j'ai lu un modèle codé UTF-8 avec Freemarker, des caractères spéciaux sont rendus correctement dans le navigateur, bien que freemarkerconfig.getdefaulageCoding () retourne "CP1252". Si je définis freemarkerconfig.setdefaultecoding ("utf-8") , je ne vois que des points d'interrogation dans le navigateur, bien que "UTF-8" soit le codage réel du fichier de modèle. Dans tous les cas, l'en-tête HTTP "Type de contenu: Texte / HTML; Charset = UTF-8" est envoyé.

Une idée de ce qui ne va pas?


0 commentaires

4 Réponses :


0
votes

Le codage de sortie est celui de vos machines Java. Si vous créez un fichier de sortie avec UTF-FOO et transmettez ce fichier de sortie à la génération de Freemarker, le codage de sortie sera utf-foo.

voir Problèmes de caractères . P>

avec ex. CODE: P>

  Template templévénmts;
  BufferedWriter writ;
  OutputStreamWriter encodé;

  encodé = new OutputStreamWriter(
   new FileOutputStream(new File(f_dirDestination, résultat)), "UTF-8");
  writ = new BufferedWriter(
   encodé);
  templévénmts = f_freemarker.getTemplate(modèle);
  templévénmts.process(f_rootDatas, writ);
  writ.close();


5 commentaires

SetDeFauletCoding concerne le codage de l'entrée. Freemarker.org/docs/api/ Freemarker / Modèle / ... L'entrée est codée UTF-8 et je dis Freemarker qu'il serait codé UTF-8, mais cela ne fonctionne que lorsque le codage CP1252 est utilisé pour la lecture de l'entrée.


Quelle est votre version de Freemarker et dans quel contexte l'utilisez-vous?


J'utilise Freemarker 2.3.16 avec Jax-Rs (mise en œuvre: Jersey) et, à la fin, Servlets.


Si vous définissez toutes les méthodes d'entrée de l'UTF-8 et traiter votre modèle à un fichier sur votre système local avec les paramètres UTF-8, est le fichier de résultats OK?


J'ai fait ça. Je définit toutes les sorties et toutes les caractères par défaut sur UTF-8. J'ai lu le modèle avec UTF-8. J'ai traité la sortie comme UTF-8. A écrit le résultat sur le disque et obtenu CP1252 (sur le système Windows). Quand je mets -dfile.encoding = uf-8 tout allait bien. Où est le fichier.Encodage à la mise en œuvre de FreeMarker?



0
votes

Eh bien, il ressemble vraiment à ce que vous pensez que votre entrée est codée UTF-8, en réalité, il est en effet codé CP1252. Pouvez-vous doublecheck, c'est-à-dire avec un éditeur hexagonal. I Deuxième avis d'Istao - essayez de traiter votre fichier de modèle dans un fichier local et de vérifier les résultats.


1 commentaires

J'ai vérifié le codage avec Jedit, ce qui gère les codages très bien. La chose Curios est que cela fonctionne même avec les mêmes fichiers de modèle sur un système avec UTF-8 comme codage par défaut. Donc, Freemarker devrait utiliser UTF-8 pour la lecture des fichiers d'entrée.



5
votes

Définissez la propriété Type de contenu dans le Freemarkerviewresolver.

Spring 4.2 Exemple H2>
@Bean
public FreeMarkerViewResolver freemarkerViewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setContentType("text/html; charset=utf-8");
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl.html");
    resolver.setRequestContextAttribute("rc");
    return resolver;
}


0 commentaires

2
votes

Dans le cas où vous utilisez un cadre de ressort et un mimemessage pour envoyer le courrier électronique, essayez de définir le contenu via un MimemessagePreeparator comme suit (je saute la méthode MimemessagePréparateur GetMessagePréparateur comme une chose importante consiste à définir le contenu):

import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import javax.mail.internet.MimeMessage;


5 commentaires

2 ans plus tard, la version actuelle et j'ai le même problème. Je n'utilise pas le printemps. Je viens de générer la sortie avec Freemarker. Modèle de réglage Encodage sur UTF-8, codage par défaut sur UTF-8, codage de sortie à UTF-8 n'aident pas. Une idée?


Avez-vous vérifié le codage du fichier de modèle? Je veux dire, si vous ouvrez le modèle dans un éditeur de texte tel que NOTEPAD ++ et définissez le codage sur UTF-8, vous voyez les caractères corrects? Si ce n'est pas le problème est lié au charert utilisé lors de la création du modèle


Le codage du modèle est UTF-8. Tous les paramètres (codage de modèle, codage de sortie) sont également UTF-8. Mais le résultat de traitement est toujours en codage donné par -DFILE.ENCODING = XXX, quel est le CP1252 comme défaut sur un système Windows. Mon application est en cours d'exécution dans Wildfly 10. J'utilise Freemarker 2.3.28. Peut-être que cela soit intéressant.


J'ai trouvé mon erreur. J'ai utilisé une sortie de sortie pour envelopper la sortie entrante sans régler le codage sur le codage de sortie de Freemarker. Le codage par défaut est CP1252 ou tout ce que je suis défini avec -DFILE.CoDing. Pas de problème de FreeMarker !!


Même si ce n'est pas quelque chose lié au problème de ce poste, c'est une bonne pratique pour éviter ce type d'erreurs pour forcer UTF-8 comme codage de fichier par défaut dans votre IDE afin que vous puissiez voir si un fichier n'est pas codé correctement.