J'ai aussi rencontré un problème montrant caractères UTF-8 (caractères spéciaux comme æ ø et å etc. .), lors de l'utilisation de l'armature de ressort et du modèle Freemarker.
Ce que j'ai fait était.
1. Assurez-vous que votre page .ftl est codé avec utf-8 Ceci est une chose importante pour assurer, qu'une page non codé avec charset UTF-8, pourrait montrer les mauvais chiffres, même si vous avez tous l'autre ensemble d'exigences. Vérifiez vos paramètres IDE, pour savoir quel encodage par défaut définit vos fichiers. Je pense cependant qu'aujourd'hui, Eclipse et NetBeans définissent tous les fichiers avec un codage UTF-8 en standard. Vous devez vous assurer qu'il code UTF-8 sans nomenclature.
2. Inclure le fichier balise Meta dans votre fichier de modèle pour définir le charset Dans votre modèle (.ftl), qui détient votre balise <head>
, définissez un <meta>
, avec l'attribut charset="UTF-8"
. Ceci est si vous utilisez HTML 5. Si vous utilisez xhtml ou HTML 4, votre balise meta doit ressembler à ceci
- HTML 5
<meta charset="UTF-8" />
- HTML 4/XHTML
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
3. Assurez-vous de définir un filtre de codage de caractères dans votre fichier de descripteur de déploiement. Vous devez filtrer toutes les demandes entrantes/sortantes via un filtre de codage de caractères. Ce filtre est défini dans votre descripteur de déploiement (web.xml/ou l'équivalent java WebApplicationInitializer).
WebApplicationInitializer (Java fichier)
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
registerCharacterEncodingFilter(servletContext);
}
/**
* Filter all incoming requests with character encoding UTF-8
* @param servletContext
*/
private void registerCharacterEncodingFilter(ServletContext servletContext) {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("UTF-8");
encodingFilter.setForceEncoding(true);
FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("characterEncodingFilter", encodingFilter);
characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
}
web.xml
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4. Définir le codage de caractères FreeMarker dans résolveur configurateur et vue Vous devez également faire tous vos fichiers FreeMarker être standard encodée avec UTF-8, cela se fait en réglant leurs propriétés UTF-8 dans FreeMarkerConfigurer et FreeMarkerViewResolver. Ceci est défini dans votre fichier de contexte d'application de printemps (je ne montrerai que l'équivalent Java car il est le même dans le fichier XML).
/**
* FreeMarker Configurer will help configure different settings of
* the FreeMarker template engine.
*
* @return an object of the FreeMarkerConfigurer class.
*/
@Bean
public FreeMarkerConfigurer freemarkerConfig() {
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
freeMarkerConfigurer.setTemplateLoaderPath("/templates/");
freeMarkerConfigurer.setDefaultEncoding("UTF-8");
return freeMarkerConfigurer;
}
/**
* The View resolver to use when resolving FreeMarker views.
*
* @return the View Resolver Object used to resolve FreeMarker views.
*/
@Bean
public FreeMarkerViewResolver viewResolver() {
FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
viewResolver.setPrefix("");
viewResolver.setSuffix(".ftl");
viewResolver.setCache(false); //Set to true during production
viewResolver.setContentType("text/html;charset=UTF-8");
return viewResolver;
}
l'espoir que cela vous aide :)