Récemment, en utilisant AJAX pour demander l'arrière-plan SpringMVC pour interroger la base de données MySQL, la page montre le code chinois brouillé
Initialement configuré dans mybatis comme suit
<select id = "queryContentByid" resultType = "java.lang.string" ParamètreType = "String"> Sélectionnez Texte dans les nouvelles où id = # {o} </lect>
Le champ de texte de la table de la table est de type blob
La valeur du texte trouvée de cette manière est toujours affichée en code brouillé dans la console.
Après cela, Google a recherché le contenu lié à résultat pertinent = BLOB sans succès, il l'a donc changé en resultType = "java.util.map", et
byte [] b = (byte []) map.get ("text"); string s = new String (b, "utf-8");
Imprimez S et le texte chinois s'affiche normalement à ce moment, mais l'affichage de la page est toujours brouillé.
Par conséquent, c'est une demande AJAX, alors vérifiez les informations de l'en-tête de réponse et trouvez ce qui suit
Content-TypeText / Html; charSet = ISO-8859-1
Étant donné que la base de données est uniformément codée en UTF-8, les informations d'en-tête de réponse sont modifiées
@RequestMapping (value = "/ queryContentById", méthode = requestMethod.get, produmes = "text / plain; charset = utf-8") public @ResponseBody String QueryContentById (@RequestParam ("id") String id) lance SQException, insupporteDencomexception {Map map = (map) ndRService.queryContentByid (id); ;}
Regardons un autre exemple de problème
1. Le contrôleur de Springmvc obtient du code brouillé:
(1) Ajouter un filtre de jeu de caractères sur web.xml:
Copiez le code comme suit: <! - Spring Character Set Filter -> <filter> <Filter-Name> SpringEncodingFilter </filter-Name> <Filter-Class> org.springFramework.web.filter.Character EncodingFilter </ Filter - Classe> <Init-Param> <Am param-name> Encoding </ Param-Name> <AmAram-Value> UTF-8 </ Param-Value> </Init-Param> <Init-Param> <param-name> Forceencoding </ param-name> <param-valeur> true </ param-valeur> </ init-param> </filter> <mappage filtrant> <filter-name> springencodingFilter </filter-name> <url-p attern> / * </ url-sattern> </ filter-mapping>
(2) Modifier sur jsp et autres pages: charset = utf-8 "et pageencoding =" utf-8 "
2. Le contrôleur lit le bon chinois, mais après l'avoir enregistré dans la base de données, il devient "??"
(1) Modifiez la connexion de la base de données jdbc_url = jdbc: mysql: // localhost: 3306 / mybatistest? Useunicode = yes & caractéristique = utf8 ("&": signifie "&" dans le fichier xml)
(2) Modifiez le jeu de caractères de la base de données sur UTF-8: Ouvrez My.ini dans le répertoire racine de MySQL (MySQL5.6 est My-Default.ini, et copiez-le comme My.ini), et ajoutez-le dans le Emplacement spécifique ci-dessous (ou modifié):
La copie de code est la suivante: [mysqld] caractères-set-server = utf8 [client] par défaut-character-set = utf8 [mysql] par défaut-caracter-set = utf8
Il n'y a aucun problème à le régler de mon côté.
Résumé:
Habituellement, le problème du code brouillé chinois est causé par des paramètres de codage de caractères incorrects. Enfin, le problème a été résolu.