Maison  >  Article  >  Java  >  Résoudre le problème des caractères tronqués recto et verso dans JavaWEB

Résoudre le problème des caractères tronqués recto et verso dans JavaWEB

黄舟
黄舟original
2017-08-20 09:13:441545parcourir

L'éditeur suivant vous apportera un résumé des solutions aux problèmes tronqués en front et backend dans javaWEB. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur et jetons un coup d'œil

Plusieurs formats d'encodage courants et leurs significations en JAVA :

ASCII. Code

Tous ceux qui ont étudié les ordinateurs connaissent les codes ASCII. Il y en a 128 au total. Ils sont représentés par les 7 bits inférieurs d'un octet 0~31 qui sont des caractères de contrôle tels que le saut de ligne. , retour chariot, suppression, etc. ; 32~126 sont des caractères imprimés, qui peuvent être saisis via le clavier et affichés.

ISO-8859-1

128 caractères ne suffisent évidemment pas, c'est pourquoi l'organisation ISO en a formulé d'autres sur la base des codes ASCII. Les normes sont utilisées pour étendre le codage ASCII, il s'agit de ISO-8859-1 ~ ISO-8859-15, parmi lesquelles ISO-8859-1 couvre la plupart des caractères des langues d'Europe occidentale et est la plus largement utilisée. ISO-8859-1 est toujours un codage sur un seul octet, qui peut représenter un total de 256 caractères.

GB2312

Son nom complet est « Jeu de base de caractères chinois codés pour l'échange d'informations », qui est un double -encodage par octets, la plage de codage totale est A1-F7, dont A1-A9 est la zone de symboles, contenant un total de 682 symboles, et B0-F7 est la zone de caractères chinois, contenant 6763 caractères chinois.

GBK

Le nom complet est « Spécification d'extension du code interne des caractères chinois », qui est une nouvelle norme formulée par l'État. Spécification du code interne des caractères chinois du Bureau de supervision technique pour Windows95. Il semble étendre GB2312 et ajouter davantage de caractères chinois. Sa plage de codage est 8140~FEFE (en supprimant XX7F). Il peut représenter 21 003 caractères chinois. Son codage est compatible GB2312, c'est-à-dire que les caractères chinois codés avec GB2312 peuvent être décodés avec GBK, et il n'y aura pas de caractères tronqués.

GB18030

Le nom complet est "Jeu de caractères codés chinois pour l'échange d'informations", qui est une norme obligatoire dans mon pays Il peut s'agir d'un codage sur un seul octet, sur deux ou quatre octets, son codage est compatible avec le codage GB2312. Bien qu'il s'agisse d'une norme nationale, il n'est pas largement utilisé dans les systèmes d'application réels.

UTF-16

Quand il s'agit d'UTF, il faut mentionner Unicode (Universal Code), l'ISO essaie de créer un Un tout nouveau dictionnaire hyperlinguistique, toutes les langues du monde peuvent être traduites les unes dans les autres grâce à ce dictionnaire. Vous pouvez imaginer à quel point ce dictionnaire est complexe. Pour les spécifications détaillées d'Unicode, veuillez vous référer aux documents correspondants. Unicode est la base de Java et XML. Ce qui suit est une introduction détaillée à la forme de stockage d'Unicode dans l'ordinateur.

UTF-16 définit spécifiquement la manière dont les caractères Unicode sont accessibles sur les ordinateurs. UTF-16 utilise deux octets pour représenter le format de conversion Unicode. Il s'agit d'une méthode de représentation de longueur fixe, quel que soit le caractère, il peut être représenté par deux octets. Deux octets font donc 16 bits. UTF-16 est très pratique pour représenter des caractères. Tous les deux octets représentent un caractère. Cela simplifie grandement l'opération lors de l'utilisation de chaînes. C'est également une raison très importante pour laquelle Java utilise UTF-16 comme format de stockage de caractères en mémoire.

UTF-8

UTF-16 utilise uniformément deux octets pour représenter un caractère, bien que ce soit très simple et pratique dans représentation. , mais il a aussi ses inconvénients. Un grand nombre de caractères qui peuvent être représentés par un octet sont désormais représentés par deux octets, ce qui double l'espace de stockage dans la bande passante du réseau actuel qui est encore très limitée, ce qui augmentera la taille du réseau. réseau de transmission, et ce n’est pas nécessaire. UTF-8 utilise une technologie de longueur variable et chaque zone d'encodage a une longueur de caractère différente. Différents types de caractères peuvent être composés de 1 à 6 octets.

Règles d'encodage UTF-8 :

S'il s'agit d'un octet, le bit le plus élevé (le 8ème bit) est 0, Indique qu'il s'agit d'un caractère ASCII (00 – 7F). On peut voir que tous les codages ASCII sont déjà UTF-8.

2. Si un octet commence par 11, le nombre de 1 consécutifs indique le nombre d'octets de ce caractère, par exemple : 110xxxxx signifie qu'il s'agit du premier octet d'un caractère UTF-8 double octet.

3. Si un octet commence par 10, cela signifie que ce n'est pas le premier octet, et vous devez attendre avec impatience d'obtenir le premier octet du caractère actuel

Comparaison des différents formats d'encodage

Il peut gérer les quatre formats d'encodage de caractères chinois suivants. Les règles d'encodage de GB2312 et GBK sont similaires, mais GBK a une plage plus large et peut gérer tous les caractères chinois. Par conséquent, lors de la comparaison de GB2312 et GBK, GBK doit être sélectionné. . UTF-16 et UTF-8 traitent tous deux le codage Unicode, et leurs règles de codage ne sont pas les mêmes. Relativement parlant, le codage UTF-16 est le plus efficace, il est plus facile de convertir des caractères en octets et il est préférable d'effectuer une chaîne. opérations. Il convient à une utilisation entre le disque local et la mémoire et peut basculer rapidement entre les caractères et les octets. Par exemple, le codage de la mémoire Java utilise le codage UTF-16. Cependant, il ne convient pas à la transmission entre réseaux, car la transmission réseau peut facilement endommager le flux d'octets. Une fois le flux d'octets endommagé, il sera difficile à récupérer. En comparaison, l'UTF-8 est plus adapté à la transmission réseau et utilise un seul. Stockage de 1 octets pour les caractères ASCII. De plus, les dommages causés à un seul caractère n'affecteront pas les autres caractères suivants. L'efficacité de l'encodage se situe entre GBK et UTF-16. Par conséquent, UTF-8 équilibre l'efficacité de l'encodage et la sécurité de l'encodage et constitue un encodage chinois idéal. méthode.

Solution chinoise tronquée :

1 L'encodage intégré de Tomcat est au format ISO-8859-1, n'est-ce pas. n'est-ce pas compatible avec l'encodage chinois. Utilisez le même format pour recevoir (ISO-8859-1), puis utilisez un encodage analysable (utf-8) pour convertir. Après traitement, il sera envoyé à la réception. Lors de l'envoi à la réception, vous devez définir :

res.setContentType("text/html;charset=utf-8");//Définir l'encodage des caractères de la page pour résoudre le problème de brouillé Caractères chinois affichés sur l'interface ;

2.req.setCharacterEncoding("utf-8");//Doit être écrit en premier lieu, car les données sont lues de cette manière, sinon les données aura tort.

3.Spring fournit un filtre CharacterEncodingFilter qui peut être utilisé pour résoudre le problème des caractères tronqués.

Vous devez faire attention aux problèmes suivants lors de l'utilisation de CharacterEncodingFilter :

Les données du formulaire sont soumises en mode POST

Configurez le filtre CharacterEncodingFilter dans web.xml

Encodage de la page L'encodage spécifié par le filtre doit être cohérent

Exemple de configuration de CharacterEncodingFilter :


<filter>
  <filter-name>encodingFilter</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>encodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
Ce qui précède est que lorsque je rencontre des problèmes lors du processus d'écriture de code, je recherche les informations et résume ce que j'écris. C'est ce que je sais, et il devrait y avoir des solutions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn