Je développe sur la base d'eclipse3.2+j2ee5.0 +tomcat5.09+mysql5.0.
Premièrement, les données chinoises tronquées sous la forme POST peuvent être résolues
en temps réel via des filtres. Le code des filtres est le suivant :
package filters ;
import java.io.IOException ;
importer javax.servlet.Filter ;
importer javax.servlet.FilterChain ;
importer javax.servlet.FilterConfig ;
importer javax.servlet.ServletException ;
importer javax.servlet.ServletRequest ;
importer javax.servlet.ServletResponse ;
import javax.servlet.UnavailableException ;
la classe publique SetCharacterEncodingFilter implémente le filtre...{
Encodage de chaîne protégé = null ;
protégé FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() ...{
this.encoding = null;
this.filterConfig = null ;
}
public void doFilter (requête ServletRequest, réponse ServletResponse,
chaîne FilterChain)
throws IOException, ServletException ...{
// Sélectionne et définit conditionnellement l'encodage de caractères à utiliser
if (ignorer || (request.getCharacterEncoding() == null)) ...{
Encodage de chaîne = selectEncoding(request);
if (encodage != null)
request.setCharacterEncoding(encodage);
}
// Passer le contrôle au filtre suivant
chain.doFilter(request, réponse);
}
public void init(FilterConfig filterConfig) lance ServletException ...{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
Valeur de chaîne = filterConfig.getInitParameter("ignore");
si (valeur == null)
this.ignore = vrai;
sinon si (value.equalsIgnoreCase("true"))
this.ignore = vrai;
sinon si (value.equalsIgnoreCase("oui"))
this.ignore = vrai;
autre
this.ignore = false;
}
protected String selectEncoding (demande ServletRequest) ...{
return (this.encoding);
}
}
configuration des filtres (configuration web.xml) :
<filtre>
<nom-filtre>Définir le codage des caractères</nom-filtre>
<classe de filtre>filters.SetCharacterEncodingFilter</classe de filtre>
<init-param>
<nom-param>encodage</nom-param>
<valeur-param>GBK</valeur-param>
</init-param>
</filtre>
<cartographie de filtre>
<nom-filtre>Définir le codage des caractères</nom-filtre>
<modèle-url>/*</modèle-url>
</filtrage-mapping>
2. Le problème des caractères tronqués lors du stockage des données chinoises dans la base de données
est pris comme exemple dans MySQL. Réécrivez simplement la chaîne de connexion :
jdbc:mysql://localhost:3306/workshopdb?
3. Problèmes de transmission des paramètres via l'URL et d'identification des noms de fichiers chinois
Symptômes du problème : 1. Transmission des paramètres via l'URL, par exemple :
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student. Bâtiment de fête
La valeur obtenue via request.getParameter("levleName") est Ranma.
2. Reconnaissez les noms de fichiers chinois, par exemple :
Les images ne peuvent pas être affichées.
Solution :
1. Si vous souhaitez résoudre uniquement le premier problème, c'est très simple. Juste deux lignes de code :
String role=request.getParameter("chara");
role=new String(role.getBytes("ISO-8859-1"),"GB2312");
out.println(rôle);
Parce que le serveur Tomcat utilise le jeu de caractères ISO-8859-1 par défaut. Mais cela ne peut résoudre que le premier problème mais pas le problème du nom de fichier chinois.
2. Résolvez les deux problèmes ensemble, recherchez l'instruction suivante et ajoutez URIEncoding="GB18030", afin que les deux problèmes soient résolus ensemble (. aucun rôle requis) =new String(role.getBytes("ISO-8859-1"),"GB2312"); Conversion, les paramètres obtenus sont en chinois normal)
De plus, de nombreux articles expliquent que vous pouvez ajouter URIEncoding="UTF-8", ce qui peut résoudre le problème du nom de fichier chinois, mais lorsque vous obtenez les paramètres transmis par l'URL via String role=request.getParameter("chara"); , vous obtenez l'encodage UTF-8, il doit être converti en GB2312, ce qui est gênant.
Ce qui précède est mon résumé de mon utilisation. J'espère que tout le monde pourra fournir des avis précieux.
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx