Le code à ordures est un mal de tête. Cet article présente une solution au problème du chinois brouillé dans le printemps MVC, qui est le suivant:
1: La solution pour le code brouillé après le formulaire Soumettre le contrôleur obtient des paramètres chinois
Remarque: Le codage de la page JSP est défini sur UTF-8
La méthode de soumission de formulaire doit être publiée. Le filtre de codage à ressort sous la méthode GET n'a aucun effet
<% @ Page Language = "Java" import = "java.util. *" Pageencoding = "utf-8"%> <form action = "$ {ctx} / user / addUser" name = "userForm" metheth = "post">Modifier web.xml et ajouter des filtres de codage comme suit (notez que vous devez définir la valeur de paramètre de forceccoding sur true)
<filter> <filter-name> CaracterEncodingFilter </ Filter-Name> <Filter-Class> orgspringFrameworkWebFilterCharacTeRencodingFilter </ Filter-Class> <IniT-PARAM> <AMAM-NAME> Encoding </ Param-name> <Am param-Value> UTF-8 </ param-Value> <Init-Param> <Am param-name> Forceencoding </ Param-name> <Amar-Value> true </ Param-Value> </ Init-Param> </filter> <Imlter-Mapping> <Lilter-Name> CaracterCcodingFilter </filter-name> <Url-Pattern> / * </url-Pattern> </filter-mapping>
Remarque: Le codage de la base de données prend-il en charge chinois
Les tables de base de données et les champs de table sont-ils corrects?
Modifiez les paramètres des paramètres de la base de données de connexion de configuration:
<propriété name = "url" value = "jdbc: mysql: // localhost: 3306 / dbname? useunicode = true & caractèrescoding = utf-8"> </ propriété>
Le premier cas:
Entrez la page JSP en chinois et entrez le code brouillé du contrôleur. Pour le moment, ce que vous devez définir est d'ajouter un filtre (filtre) codé pour unifier le codage en UTF-8. Le code est le suivant:
Fichier de configuration Web.xml:
<filter> <filter-name> CaracterEncodingFilter </ Filter-Name> <Filter-Class> orgspringFrameworkWebFilterCharAcTencodingFilter </ Filter-Class> <IniT-PARAM> <AMAM-NAME> Encoding </ Pard AM-NAME> <AMARD-VALUE> UTF-8 </ PARAM-VALUE> </ Init-Param> </filter> <Imlter-Mapping> <Filter-Name> CaracterEncodingFilter </filter-Name> <Url-Pattern> / * </ url-Pattern> </filter-Mapping>
Il convient de noter ici qu'il est préférable de placer ce code au début de WebXML, car il y a un ordre d'interception, et s'il est placé à l'arrière, il est facile de le bloquer.
Le deuxième cas:
Données chinoises de la base de données, la page JSP affiche du code brouillé (pas du code brouillé au sens strict, mais est présenté sous la forme d'un point d'interrogation)
Étant donné que l'interaction des données entre notre front et le backend utilise les données JSON, je ne sais pas grand-chose sur la raison de cette situation. Je ne l'ai jamais rencontré auparavant. Je ne peux que me blâmer d'avoir fait trop peu de projets, et il n'est pas difficile de le résoudre. J'ai juste besoin de définir le format d'encodage lors de la conversion de JSON. Le code est le suivant:
RéponseTContentType ("Application / JSON; charset = UTF-8"); // Empêcher la transmission des données à partir du code brouilléSi vous écrivez cette phrase, vous n'aurez plus de codes brouillé.
La troisième situation:
La page est également correcte pour la transmettre au contrôleur, mais après l'avoir enregistrée dans la base de données, elle sera brouillée (ce n'est pas un code brouillé strict, tout comme ce qui précède, il y a tous les points d'interrogation)
Ce problème m'a troublé pendant un certain temps. J'ai commencé à sentir que le format de codage de la base de données est incorrect. Il n'est toujours pas possible de recréer la base de données avec le format de codage de l'UTF-8. Enfin, je sentais que c'était un problème avec JBoss. Notre serveur utilise JBoss. J'ai recherché sur Internet et ajouté le format d'encodage lors de la connexion à la source de données. Le code est le suivant:
<dataSource jta = "true" jndi-name = "java: jboss / dataSources / jcmysqlds" pool-name = "jcmysqlds" activé = "true" use-java-context = "true"> <connection-url> jdbc: mysql: // 46 / itoo_basic_basic? useucicode = true & caractotocoding = utf-8 </ connection-url> <Deuvre> mysql </ driver> <ool> <pref Ill> false </prefill> <use-strict-min> false </ use-strict-min> <flush-strategy> échoueConnectionOnly </frsen-strategy> </ool> <Security> <Derser-Name> root </serser-name> <pass <a <a href = "http: // wwwitnet / edu / ebg /" target = "_ blank"> word </a>> 123456 </ pass <a href = "http: // wwwitnet / edu / ebg /" cible = "_ blanc"> word </a>> </ Security> </ datasource>
1. Page brouillée
Les pages sont relativement faciles à résoudre, et ils configurent souvent des jeux de caractères pertinents sur la page JSP ou la page HTML correspondante. comme
% @ Page Language = "Java" ContentType = "Text / HTML; Charset = UTF-8" Pageencoding = "UTF-8"%
2. Transférer la valeur brouillée du code
Pendant le processus de transmission de valeur, les codes brouillés apparaissent également fréquemment. Sans parler de quel scénario il s'agit, les solutions couramment utilisées incluent les configurations suivantes
<! - Configurez le filtre de demande, définissez le format de codage sur UTF-8, évitez le chinois brouillé -> <filter> <filter-name> springutf8encoding </filter-name> <filter-Class> OrgspringFrameworkWebfilterCharacterEncodingFilter </filter-class> <init-patam> <paramn-name> <Am param-Value> UTF-8 </ Param-Value> </ Init-Param> <Init-Param> <Init-Param> <Am param-Name> Forceencoding </onsam-name> <param-Value> True </Ar param-Value> </Init-Param> </filter>
Définir le jeu de caractères de la demande
Souvent, après l'avoir passée de la réception au contrôleur ou à l'action correspondante, le code brouillé apparaît. Mon idée générale est d'imprimer le jeu de caractères par défaut de la demande elle-même.
SystemOutPrintln (requestGetCacteRencoding ());
Ensuite, selon la situation, si le jeu de caractères requis n'est pas imprimé, définissez le jeu de caractères correspondant.
requestSetcharAtterencoding ("UTF-8");Bien sûr, certaines situations peuvent ne pas être résolues. Vous pouvez utiliser ce qui suit
String str = newstring ((requestGetParameter ("bigQesationTyPename")) GetBytes ("ISO-8859-1"), "UTF-8")3. Enregistrer le code brouillé à la base de données
C'est relativement compliqué. Ici, LZ utilise MySQL, et MySQL est utilisé pour présenter comment résoudre ce problème brouillé
Comme nous le savons tous, qu'il s'agisse de pur JDBC, Hibernate ou JPA, il est préférable de l'utiliser en bas. En fait, il s'agit essentiellement de JDBC, et le cadre correspondant n'est encapsulé que sur une base pertinente. Donc, quel que soit le type de technologie, il utilisera l'URL connecté à la base de données. L'URL doit donc être vérifiée en premier
URL
La situation standard ajoutera les paramètres de jeu de caractères correspondants après la situation correspondante, comme suit
jdbcurl = jdbc: mysql: /// itcastoa? useunicode = true & worseencoding = utf-8
Comme mentionné ci-dessus, UseUnicode doit être connecté au jeu de caractères dans la base de données, et qu'est-ce que c'est? Ceci est un problème, dans XML et est le caractère d'évasion de &. Si vous utilisez XML pour configurer la configuration de connexion de la base de données correspondante, c'est le problème. Mais si vous utilisez ** les propriétés, il y aura un problème et vous devez supprimer l'ampli. C'est en effet l'expérience de LZ ayant une tête sanglante.
base de données
Le problème ici est également relativement difficile à gérer. Connectez-vous à la base de données
Afficher le format de codage de la base de données
<img src = "http: // www2ctocom / uploadfile / collfiles / 20150302 / png" 7plu ninja htahle ninja: 1OpenablelAl: dimanche. 1 jour SQL> "=" ">
Vous pouvez voir si le jeu de caractères du serveur est Latin1. Ici, nous devons parler des ensembles de caractères couramment utilisés.
Pour la paix et la prospérité du monde, l'organisation ISO a désigné une solution de jeu de caractères Unicode. Le codage Unicode est un pont de communication mutuelle et de conversion entre différents codages, y compris le binaire 32 bits, afin qu'il puisse accueillir des caractères à la puissance de 2, ce qui est suffisant pour la vie. Unicode est divisé en trois solutions selon différents besoins.
UTF8: Utilisé pour résoudre le codage qui apparaît dans différentes langues à l'international. Pour l'anglais, 8 chiffres sont utilisés et pour les chinois, 3 chiffres sont utilisés. Il peut être affiché sur n'importe quel navigateur qui prend en charge le jeu de caractères UTF9 sans autre traitement.
Les deux autres sont UTF16 et 32, qui ne seront pas modifiés ici. Vous pouvez le vérifier vous-même, mais c'est toujours à cause de la commodité du stockage et de l'utilisation pour décider laquelle utiliser.
D'accord, celui qui est relativement familier est GBK, communément appelé code national standard, formulé par les normes nationales chinoises, et ne contient que des caractères chinois. Ainsi, par rapport aux deux, UTF8 est une meilleure compatibilité, mais a une plus grande capacité de stockage.
Revenez bientôt, à peu près, si vous chargez le jeu de personnages, ou revenez d'abord le problème. Il est donc OK d'utiliser GBK ou UTF8 ici. Mais Latin1 n'est certainement pas possible, ici, il est principalement défini par une telle commande
Le serveur, la base de données et les parties de la table de données sont définis séparément et le codage de connexion doit être défini. Les paramètres d'encodage de connexion sont les suivants:
mysql> set caractères_set_client = 'gbk'; mysql> set caractères_set_connection = 'gbk'mysql> set caractères_set_results =' gbk '
Configurez le codage et vous pouvez insérer avec succès le chinois ci-dessous. En fait, il peut être résolu en une phrase.
Commandes couramment utilisées
Afficher le format de codage de la base de données
afficher des variables comme 'caractères_set_%';
Voir la création de tables dans la base de données
Afficher Create Table TableName;
Définir le format de codage de la base de données
setNames 'gbk';
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.