2010-11-30 15 views
1

J'essaie d'enregistrer des caractères chinois à partir d'un formulaire soumis dans la base de données.Enregistrer des caractères chinois avec Spring-MVC/Java

J'ai mis les contentType sur le jsp via

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

J'ai aussi mis cette étiquette à l'intérieur du du jsp:

<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8" /> 

Cependant, lorsque je soumets la forme, mon le contrôleur voit un caractère différent de celui que j'ai entré.

Je suis entrée le caractère 我 et de voir æ ?? dans le contrôleur. Lorsque les données réapparaissent sur la page, il affiche le même mauvais caractère (æ ??).

Pourquoi ne pas le contrôleur RemettRe le caractère correct?

+1

Voir http: // stackoverflow.com/questions/4298252/jsp-page-encoding-problem/4298286#4298286 – axtavt

Répondre

0

Ajouter un attribut accept-charset à votre formulaire:

<form method="POST" accept-charset="utf-8" ... > 

Cela indique au navigateur de soumettre le contenu de votre formulaire en UTF-8 au serveur.

+0

Maintenant, il apparaît comme "æ" – Corey

+0

avec deux blocs au lieu de points d'interrogation ... – Corey

+0

Cet attribut est marqué optionnel par la spécification HTML et ignoré par pratiquement tout b rowsers lorsque le jeu de caractères est présent dans l'en-tête de réponse qui est alors préféré. Ne l'utilisez pas. – BalusC

1

Tous les navigateurs ne respecteront le jeu de caractères que vous avez spécifié dans la page ou la forme. Spring fournit un filtre, le CharacterEncodingFilter, qui peut ajouter un codage de caractères ou forcer un codage particulier, à mesure que la requête arrive et avant qu'elle ne frappe le contrôleur.

+0

J'ai défini le filtre en utilisant la réponse de Spiff dans http://forum.springsource.org/showthread.php?t=14063. – Corey

3

Déclarer un CharacterEncodingFilter dans votre fichier web.xml avant tout autre filtre

<filter> 
    <filter-name>charsetFilter</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> 
</filter> 

<filter-mapping> 
    <filter-name>charsetFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Dans votre fichier jsp essayez d'ajouter ceci au début du fichier:

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

Les parties 'language' et' contentType' sont par ailleurs superflues ici. Ce sont déjà les défauts. Juste '<% @ page pageEncoding =" UTF-8 "%>' est suffisant. – BalusC

+0

Cela convertira les données à? (Point d'interrogation) seulement, j'utilise sring, hibernate et mysql. –