Tout d'abord, regardons où les caractères tronqués commencent à apparaître. Tant que l'encodage est unifié, il n'y aura pas de caractères tronqués comme exemple. et expliquez en détail :
1. Si le code tronqué apparaît à partir de la page jsp, ajoutez ce qui suit à la page d'en-tête jsp :
<%@ page language="java" pageEncoding="UTF-. 8" %>
Ajoutez la balise dans la balise head.
2. Si des caractères tronqués apparaissent dans la servlet, il existe deux méthodes :
La première consiste à ajouter
request.setCharacterEncoding(" à l'en-tête des méthodes doget et doPost dans chaque servlet UTF- 8″);
La deuxième option est la plus sûre, une fois pour toutes, qui consiste à écrire une classe de filtre dédiée, également appelée internationalisation. Le nom de la classe est SetCharacterEncodingFilter et le contenu est le suivant
package com.sharep.filter;//包名 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class SetCharacterEncodingFilter implements Filter { protected String encoding = null; protected FilterConfig filterConfig = null; protected boolean ignore = true; public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null) this.ignore = true; else if (value.equalsIgnoreCase("true")) this.ignore = true; else this.ignore = false; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (ignore || (request.getCharacterEncoding() == null)) { String encoding = selectEncoding(request); if (encoding != null) request.setCharacterEncoding(encoding); } chain.doFilter(request, response); } public void destroy() { this.encoding = null; this.filterConfig = null; } protected String selectEncoding(ServletRequest request) { return (this.encoding); } }
<filter> <filter-name>SetCharacterEncoding</filter-name> <filter-class>com.young.filter.SetCharacterEncodingFilter</filter-class>//注意这里是类名,要有完整包名 <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>SetCharacterEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
S'il y a encore des caractères tronqués, c'est un problème avec le mysql. base de données
1) Assurez-vous que le codage de la base de données est UTF-8 lors de la création de la base de données. Il est préférable de spécifier le format de codage dans chaque table. Le mysql par défaut est latin1
2) Si la version mysql. est 4.x ou supérieur, les caractères tronqués apparaissent toujours dans la base de données. Il existe deux solutions :
La première consiste à spécifier la méthode d'encodage dans le code pour se connecter à la base de données :
String url = “jdbc:mysql://localhost:3306/test2?autoReconnect=true&useUnicode=true&characterEncoding=gbk&mysqlEncoding=utf8″ ;
show variables like ‘collation_%';