Table des matières
Parlons d'abord de ce que sont les caractères tronqués
Maison Problème commun Quelle est la cause des caractères chinois tronqués ?

Quelle est la cause des caractères chinois tronqués ?

Nov 09, 2022 am 11:14 AM
乱码 中文乱码

La raison des caractères chinois tronqués : la méthode de décodage et la méthode d'encodage sont incohérentes. Un caractère chinois codé en UTF-8 sera converti en 3 octets, et s'il est codé en gbk, il sera converti en 2 octets ; et un caractère anglais codé en UTF-8 sera converti en 1 octet, s'il est codé en gbk, il le sera. être converti en 1 octet.

Quelle est la cause des caractères chinois tronqués ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, ordinateur Dell G3.

Parlons d'abord de ce que sont les caractères tronqués

Je ne sais pas si quelqu'un y a déjà pensé de cette façon. Une chaîne contient non seulement des caractères, mais également des informations d'encodage qui la cachent. Par exemple, String str = "Bonjour" en Java ; je pensais cela auparavant, la chaîne str cache sa méthode d'encodage unicode ou gbk, iso-8859-1, etc. Cette compréhension est erronée. Les caractères ne sont que des caractères sans aucune autre information. La bonne compréhension devrait être que la chaîne que les gens voient dans un fichier est le système qui lit les informations numériques dans la mémoire et les décode ensuite. Les caractères sont affichés en dernier. , c'est-à-dire que lorsque vous double-cliquez pour ouvrir un fichier texte, le système lira et affichera les informations numériques dans la mémoire. Lorsque vous enregistrez un fichier texte, le système encodera le fichier selon la méthode d'encodage que vous avez définie, puis le mettra. dans la mémoire. Donc les caractères tronqués sont aussi des caractères, juste des caractères étranges, et il n'y a pas de "code".

Parlons ensuite des raisons des codes tronqués

Nous voyons souvent l'explication des raisons des codes tronqués sur Internet : Les codes tronqués sont causés par l'incohérence entre la méthode de décodage et la méthode d'encodage. pas faux, mais la même phrase elle-même est Le code tronqué n'est qu'un résumé, cela ne vous aide pas à comprendre le code tronqué.

La question que nous voulons poser est donc la suivante : pourquoi des codes tronqués apparaissent-ils lorsque la méthode de décodage et la méthode d'encodage sont incohérentes.

Voici les trois méthodes d'encodage utf-8, gbk et iso-8859-1 à titre d'exemples.

     @Test
     public void testEncode() throws Exception {
        String str = "你好",en = "h?h";
        
        System.out.println("========中文字符utf-8=======");
        byte[] utf8 = str.getBytes(); // 以utf-8方式编码 ,default:utf-8
        for (byte b : utf8) {            
            System.out.print(b + "\t");
        }
        
        System.out.println("\n"+"========英文字符utf-8=======");
        byte[] utf8_en = en.getBytes(); // 以utf-8方式编码 ,default:utf-8
        for (byte b : utf8_en) {            
            System.out.print(b + "\t");
        }
        
        System.out.println("\n"+"========中文字符gbk=========");
        byte[] gbk = str.getBytes("gbk");
        for (byte b : gbk) {            
            System.out.print(b + "\t");
        }
        
        System.out.println("\n"+"========英文字符gbk=========");
        byte[] gbk_en = en.getBytes("gbk");
        for (byte b : gbk_en) {            
            System.out.print(b + "\t");
        }
        
        String s = new String(utf8,"utf-8");
        String s1 = new String(utf8,"gbk");
        System.out.println("\n"+s + "====gbk:" + s1);
     }
Copier après la connexion

Testez la méthode ci-dessus, et le résultat imprimé est :

========中文字符utf-8=======
-28 -67  -96 -27  -91 -67  
========英文字符utf-8=======
104 63  104 
========中文字符gbk=========
-60 -29  -70 -61  
========英文字符gbk=========
104 63  104 
你好====gbk:浣犲ソ
------------------------------------------------------------------------------------
Copier après la connexion

On peut conclure que :

Un caractère chinois sera converti en 3 octets s'il est codé avec utf-8, et s'il est codé avec gbk, il sera converti en 2 octets ;

Un caractère anglais sera converti en 1 octet s'il est codé en utf-8, et s'il est codé en gbk, il sera converti en 1 octet.

Il ressort de la dernière ligne d'impression combinée aux lignes 29 à 31 du code que si le tableau d'octets utf8 est décodé en mode utf-8, il n'y aura pas de caractères tronqués, et ce sera toujours le cas. le "Bonjour" original, et s'il est décodé en mode gbk Lors du décodage, trois caractères tronqués sont apparus. Pourquoi y a-t-il 3 au lieu de 2 ?

Parlons ensuite de l'iso-8859-1. Cet encodage est utilisé dans la série anglaise, ce qui signifie qu'il ne peut pas représenter le chinois (si vous souhaitez l'utiliser, vous devez vous fier à d'autres encodages compatibles avec l'iso-8859. -1 méthode d'encodage). Il ne peut pas être lu. Les caractères seront traités comme des points d'interrogation anglais '?'. Le nombre d'encodage iso-8859-1 des points d'interrogation anglais est : 63 (décimal) (en fait, dans presque toutes les méthodes d'encodage). , tous les caractères anglais utilisent une représentation de code d'octet fixe, à l'exception du codage Unicode).

     @Test
     public void testISO() throws Exception {
         String str = "你好";
         byte[] bs = str.getBytes("iso-8859-1");
         for (byte b : bs) {
            System.out.println(b);
         }
         System.out.println(new String(bs,"iso-8859-1"));
         System.out.println(new String(bs,"utf-8"));
         System.out.println(new String(bs,"gbk"));
         System.out.println(new String(bs,"unicode"));         
     }
Copier après la connexion

Imprimer les résultats

63
63
??
??
??
㼿
Copier après la connexion

Explication 63 =》?, tous les chinois sont considérés ?, donc quand ce code est exécuté : byte[] bs = "Hello".getBytes("iso-8859-1" );Les informations ont été perdu.

Execute String str = new String(bs, "any charset"); str n'est plus égal à "Bonjour", mais deux points d'interrogation ??. Ainsi, dans Tomcat, nous rencontrons souvent des caractères chinois se transformant en une longue chaîne de ??????, ce qui en est l'origine.

En iso-8859-1, utf-8 et gbk, un bytecode représente un caractère anglais

En codage Unicode, un bytecode ne peut représenter aucun caractère, et il est stipulé qu'il doit s'agir de deux bytecodes (parfois 4) peut représenter un personnage.

Cela dit, beaucoup de gens peuvent se demander pourquoi tant de méthodes d'encodage sont utilisées. Tous les caractères peuvent-ils être représentés en les unifiant en utf-8 ?

Le codage ne consiste pas seulement à savoir s'il peut représenter des caractères, mais également à transmettre et à stocker.

1. UTF-8 peut en effet représenter presque tous les caractères connus. Comme mentionné précédemment, seuls 3 octets représentent un caractère chinois en codage UTF-8, ce qui prend évidemment de la place et n'est pas propice à la transmission et au stockage (la transmission et le stockage se font tous deux en binaire)

2. Le caractère économise le plus d'espace, comme iso-8859-1. Mais il n’y a pas seulement des personnages anglais dans le monde, mais aussi des personnages de diverses régions et pays. Le nombre de caractères doit donc être supérieur à 2 à la puissance 8.

Ainsi en combinant les deux points ci-dessus, de nombreuses méthodes d'encodage apparaissent naturellement.

Comprendre les règles des différentes méthodes d'encodage : https://jingyan.baidu.com/article/020278118741e91bcd9ce566.html

Pour plus de connaissances liées à la programmation, veuillez visiter : Enseignement de la programmation ! !

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment résoudre les caractères chinois tronqués sous Linux Comment résoudre les caractères chinois tronqués sous Linux Feb 21, 2024 am 10:48 AM

Le problème du chinois tronqué sous Linux est un problème courant lors de l'utilisation de jeux de caractères et d'encodages chinois. Les caractères tronqués peuvent être causés par des paramètres de codage de fichier incorrects, des paramètres régionaux du système non installés ou définis, des erreurs de configuration de l'affichage du terminal, etc. Cet article présentera plusieurs solutions de contournement courantes et fournira des exemples de code spécifiques. 1. Vérifiez le paramètre d'encodage du fichier. Utilisez la commande file pour afficher l'encodage du fichier. Utilisez la commande file dans le terminal pour afficher l'encodage du fichier : file-ifilename S'il y a "charset" dans la sortie.

Comment résoudre le code tronqué du démarrage de Tomcat Comment résoudre le code tronqué du démarrage de Tomcat Dec 26, 2023 pm 05:21 PM

Solutions au démarrage tronqué de Tomcat : 1. Modifiez le fichier de configuration de Tomcat ; 2. Modifiez la langue du système ; 3. Modifiez l'encodage de la fenêtre de ligne de commande ; 4. Vérifiez la configuration du serveur Tomcat ; fichier ; 7, essayez d’autres solutions. Introduction détaillée : 1. Modifiez le fichier de configuration conf de Tomcat, ouvrez le répertoire conf de Tomcat, recherchez le fichier "logging.properties", etc.

Comment résoudre le problème des caractères chinois tronqués dans Windows 10 Comment résoudre le problème des caractères chinois tronqués dans Windows 10 Jan 16, 2024 pm 02:21 PM

Dans le système Windows 10, les caractères tronqués sont courants. La raison derrière cela est souvent que le système d'exploitation ne fournit pas de prise en charge par défaut pour certains jeux de caractères, ou qu'il y a une erreur dans les options de jeu de caractères définies. Afin de prescrire le bon médicament, nous analyserons en détail ci-dessous les procédures opératoires réelles. Comment résoudre le code tronqué de Windows 10 1. Ouvrez les paramètres et recherchez « Heure et langue » 2. Recherchez ensuite « Langue » 3. Recherchez « Gérer les paramètres de langue » 4. Cliquez sur « Modifier les paramètres régionaux du système » ici 5. Vérifiez comme indiqué et cliquez sur Assurez-vous juste.

Méthodes pour résoudre le problème des caractères chinois tronqués en PHP Dompdf Méthodes pour résoudre le problème des caractères chinois tronqués en PHP Dompdf Mar 05, 2024 pm 03:45 PM

Méthodes pour résoudre le problème chinois tronqué de PHPDompdf PHPDompdf est un outil de conversion de documents HTML en fichiers PDF. Il est puissant et facile à utiliser. Cependant, lors du traitement du contenu chinois, vous rencontrez parfois le problème des caractères chinois tronqués. Cet article présentera quelques méthodes pour résoudre le problème des caractères chinois tronqués dans PHPDompdf et fournira des exemples de code spécifiques. 1. Lors de l'utilisation de fichiers de polices pour traiter du contenu chinois, un problème courant est que Dompdf ne prend pas en charge le contenu chinois par défaut.

Méthode d'édition pour résoudre le problème des caractères tronqués lors de l'ouverture de fichiers dll Méthode d'édition pour résoudre le problème des caractères tronqués lors de l'ouverture de fichiers dll Jan 06, 2024 pm 07:53 PM

Lorsque de nombreux utilisateurs utilisent des ordinateurs, ils constateront qu'il existe de nombreux fichiers avec le suffixe dll, mais de nombreux utilisateurs ne savent pas comment ouvrir de tels fichiers. Pour ceux qui veulent savoir, veuillez consulter les détails suivants. pour ouvrir et modifier les fichiers dll : 1. Téléchargez un logiciel appelé "exescope", puis téléchargez-le et installez-le. 2. Cliquez ensuite avec le bouton droit sur le fichier dll et sélectionnez "Modifier les ressources avec exescope". 3. Cliquez ensuite sur « OK » dans la boîte de dialogue d'erreur contextuelle. 4. Ensuite, sur le panneau de droite, cliquez sur le signe « + » devant chaque groupe pour afficher le contenu qu'il contient. 5. Cliquez sur le fichier dll que vous souhaitez afficher, puis cliquez sur « Fichier » et sélectionnez « Exporter ». 6. Ensuite, vous pouvez

Résolvez le problème des caractères tronqués dans le bloc-notes Win11 Résolvez le problème des caractères tronqués dans le bloc-notes Win11 Jan 05, 2024 pm 03:11 PM

Certains amis veulent ouvrir un bloc-notes et constatent que leur bloc-notes Win11 est tronqué et ne savent pas quoi faire. En fait, il suffit généralement de modifier la région et la langue. Le Bloc-notes Win11 est tronqué : Première étape, utilisez la fonction de recherche, recherchez et ouvrez le "Panneau de configuration". Deuxième étape, cliquez sur "Modifier le format de la date, de l'heure ou des nombres" sous Horloge et région. Troisième étape, cliquez sur l'option "Gérer". au-dessus de la carte. La quatrième étape consiste à cliquer sur « Modifier les paramètres régionaux du système » ci-dessous. La cinquième étape consiste à modifier les paramètres régionaux actuels du système en « Chinois (simplifié, Chine) » et à cliquer sur « OK » pour enregistrer.

Comment résoudre les caractères tronqués de Filezilla Comment résoudre les caractères tronqués de Filezilla Nov 20, 2023 am 10:16 AM

Les solutions aux caractères tronqués de Filezilla incluent : 1. Vérifiez les paramètres d'encodage ; 2. Vérifiez le fichier lui-même ; 3. Vérifiez la configuration du serveur ; 4. Essayez d'autres outils de transfert ; 6. Vérifiez les problèmes de réseau ; . Recherchez une assistance technique. Pour résoudre le problème des caractères tronqués de FileZilla, vous devez partir de plusieurs aspects, rechercher progressivement la cause du problème et prendre les mesures correspondantes pour le réparer.

Causes courantes et solutions aux caractères chinois tronqués dans l'installation de MySQL Causes courantes et solutions aux caractères chinois tronqués dans l'installation de MySQL Mar 02, 2024 am 09:00 AM

Raisons et solutions courantes pour les caractères chinois tronqués dans l'installation de MySQL MySQL est un système de gestion de base de données relationnelle couramment utilisé, mais vous pouvez rencontrer le problème des caractères chinois tronqués lors de l'utilisation, ce qui pose des problèmes aux développeurs et aux administrateurs système. Le problème des caractères chinois tronqués est principalement dû à des paramètres de jeu de caractères incorrects, à des jeux de caractères incohérents entre le serveur de base de données et le client, etc. Cet article présentera en détail les causes courantes et les solutions des caractères chinois tronqués dans l'installation de MySQL pour aider tout le monde à mieux résoudre ce problème. 1. Raisons courantes : paramètre du jeu de caractères