Maison >développement back-end >Tutoriel Python >Explication détaillée du codage des caractères en Python
L'éditeur suivant vous proposera un article sur le codage de caractères de base de Python. L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur et jetons un coup d'œil.
Avant-propos
L'encodage des caractères est très facile à se tromper, nous doit garder quelques choses à l'esprit Dans une phrase :
1. Quel encodage est utilisé pour l'enregistrer, quel encodage doit être utilisé pour l'ouvrir
2. l'exécution du programme consiste d'abord à lire le fichier dans la mémoire
3. Unicode est le codage parent et ne peut être codé et décodé que dans d'autres formats de codage
GBK est un. encodage sub-8 et ne peut être décodé qu'en Unicode
1 Qu'est-ce que l'encodage de caractères
Nous savons que les ordinateurs ne peuvent reconnaître que le binaire, et les codes que nous écrivons habituellement doivent être convertis en binaire pour être reconnus par l'ordinateur. Alors, comment convertir les caractères que nous écrivons en binaire ? Ce processus utilise en fait une norme pour faire correspondre les caractères que nous écrivons à des nombres spécifiques. Cette norme est appelée codage de caractères.
Caractère------(Encodage des caractères)------->Numéro
2. Historique de développement de l'encodage des caractères
1. Code ASCII
Les ordinateurs sont originaires des États-Unis et le codage des caractères est également originaire des États-Unis. Mais les caractères utilisés par le peuple américain ne comportent que 26 lettres, plus quelques symboles spéciaux. Contrairement à la Chine, les élèves du primaire doivent connaître des milliers de caractères chinois. Ainsi, les Américains utilisent le code ASCII (American Standard Code for Information Interchange) comme codage de caractères. Un octet représente un caractère 1 octet = 8 bits, ce qui représente 256 changements différents, mais initialement seulement les 7 premiers. ont été utilisés, soit 127 caractères, ce qui est suffisant pour le peuple américain (bien sûr pour des raisons de coût). Plus tard, le latin a été compilé en 8ème position. À ce stade, les codes ASCII sont pleins et les pays anglophones et latins peuvent jouer avec bonheur.
2.GBK
Bien que la technologie chinoise ne soit actuellement pas aussi bonne que celle de l'empire américain, nous avons un cœur positif, donc, en 1980 , l'Administration d'État des normes a publié le codage de caractères utilisé en chinois -> GBK, qui utilise deux octets pour représenter un caractère chinois, de sorte qu'il y ait 2 à la puissance 16, soit 65 536 combinaisons, ce qui est suffisant pour les caractères chinois.
Dans le même temps, d'autres pays ont également publié leurs propres normes nationales de codage de caractères, telles que shift_JIS au Japon, Euc-kr en Corée du Sud, etc.
3. Unicode
On dit qu'il y avait des centaines d'encodages de caractères à leur apogée, et ils ne se soutenaient pas. Il semble que les gens de tous les pays soient très forts d'esprit, mais ça. n'est pas propice à l'interopérabilité du monde, c'est pourquoi Unicode est né. En 1994, l'Organisation internationale de normalisation a publié Unicode, connu sous le nom de Code universel, qui utilise deux octets pour représenter un caractère et compte 65 536 combinaisons, ce qui peut déjà couvrir la plupart des langues du monde.
4.utf-8
Bien qu'Unicode soit bon, il y a un problème que l'anglais peut être exprimé en un octet est maintenant To. utilisez deux octets, l'espace de stockage est doublé, ce qui n'est évidemment pas parfait, c'est pourquoi UTF-8 a été créé, qui n'utilise que 1 octet pour les caractères anglais et 3 octets pour les caractères chinois.
5. Tous les caractères Unicode sont sur deux octets, ce qui est simple et grossier. La conversion des caractères en nombres est rapide, mais elle prend beaucoup d'espace de stockage
utf-8 utilise différentes longueurs pour représenter différents caractères, économisant ainsi de l'espace, mais l'efficacité de la conversion n'est pas aussi rapide qu'UnicodeLe codage de caractères utilisé dans la mémoire est Unicode, et la mémoire est d'accélérer, donc je préfère sacrifier un peu d'espace, mais aussi assurer la vitesseLa transmission du disque dur et du réseau utilise utf-8, car le délai d'E/S disque ou d'E/S réseau est bien supérieur à l'efficacité de la conversion de l'utf-8 et la transmission réseau doivent économiser autant que possible la bande passante3. Exécution de l'interpréteur Python
La première étape :l'interpréteur python démarre, cela équivaut à démarrer un éditeur de texte
La deuxième étape :L'interpréteur python sert d'éditeur de texte pour ouvrir le t. py et copiez le fichier t.py depuis le disque dur. Le contenu est lu dans la mémoire
La troisième étape :L'interpréteur python interprète et exécute simplement le code de t.py. chargé en mémoireLa deuxième étape, le fichier t.py a un encodage de caractères lors de l'enregistrement, et la même méthode d'encodage doit être spécifiée lorsque l'interpréteur Python ouvre le fichier (la méthode d'encodage par défaut de Python2 est ASCII, et la méthode d'encodage par défaut de Python3 est utf-8). Si le format d'encodage de l'enregistrement du fichier est différent de celui de l'interpréteur Python, la méthode d'encodage par défaut de l'interpréteur est différente, vous devez donc écrire #coding : au début. du fichier pour indiquer à l'interpréteur Python de ne pas utiliser sa méthode de codage par défaut pour lire, mais d'utiliser la méthode spécifiée par le fichier d'en-tête pour lire le fichier, afin que vous ne puissiez pas vous tromper.
La troisième étape : lire le code qui a été chargé en mémoire (Unicode par défaut), puis l'exécuter. Lors du processus d'exécution, si des opérations telles que la définition de variables sont rencontrées, un nouvel espace mémoire sera ouvert dans le fichier. mémoire. Veuillez noter à ce stade que l'espace mémoire nouvellement ouvert n'est pas nécessairement Unicode. L'utilisateur peut spécifier la méthode d'encodage lors de la définition de la variable. L'espace mémoire ouvert lors de la définition n'est qu'un espace et peut stocker des codes dans n'importe quel format d'encodage. Prenons Python3 comme exemple
4. Encodage et décodage
Enregistrer un fichier consiste à enregistrer le fichier en mémoire Vers le disque dur
La lecture de fichiers consiste à lire les fichiers du disque dur dans la mémoire
Unicode est l'encodage parent, utf -8, GBK sont les encodages enfants. Si le sous-code veut être converti en d'autres codes, il doit d'abord être converti en code parent, puis converti du code parent en d'autres sous-codes
Le décodage est le décodage, qui est le processus de conversion du sous-code en code parent Unicode
L'encodage est un encodage, qui est le processus de conversion d'Unicode en d'autres encodages
Comme je l'ai déjà dit, lorsqu'un fichier est lu dans mémoire, il devient un encodage Unicode (bien sûr, c'est la valeur par défaut, et peut également être modifié selon les instructions), Le processus de lecture des fichiers du disque dur consiste à décoder l'utf-8 du disque dur en Unicode
. Lorsque le fichier est enregistré, c'est le processus de sauvegarde de la mémoire sur le disque dur. Le disque dur est codé en utf-8 et doit être codé par Unicode en utf-8
5. La différence entre Python2 et Python3
1 Le codage par défaut de Python2 est ASCII, ouvrez utf-8 pour enregistrer Une erreur sera signalée lors de la saisie. le fichier.#coding doit être ajouté au fichier d'en-tête : utf-8Str en Python2 est reconnu comme Bytes, donc str en Python2 est le résultat de l'encodage. En fait, cela sera fait par défaut. . Le problème est d'ajouter un u devant str, de le convertir d'abord en Unicode et de l'encoder en octetsIl existe deux types de chaînes dans Python2, str et Unicode str peuvent être convertis en ajoutant un 'u. ' devant. Convertir en Unicode2. La méthode d'encodage par défaut de python 3 est utf-8, vous pouvez ouvrir directement les fichiers enregistrés en utf-8Str en Python3 est reconnu. comme UnicodeIl existe également deux types de chaînes (bytes et str) dans Python3, mais les bytes sont des octets et str est unicode6. Imprimez sur le terminal
Tout d'abord, vous devez savoir que la méthode d'encodage par défaut du terminal Windows est GBKLe terminal est également une application et s'exécute en mémoire, donc le processus de l'impression avec print() se fait de la mémoire au milieu de la mémoire. Ainsi, pour Unicode, quelle que soit la façon dont vous imprimez, il n'y aura pas d'erreur. Cependant, dans Python2, à l'exception de la chaîne avec « u », les autres chaînes sont des octets. À l'heure actuelle, le terminal utilise le codage GBK, tandis que Python2 utilise le codage GBK. utf-8 spécifié ou code Ascii par défaut, une erreur se produira lors de l'impression dans le terminal. Voici ma compréhension actuelle. Si je me rends compte qu'il y a des erreurs ou des expressions peu claires à l'avenir, je les réviserai. Hélas, l'encodage des caractères est un écueilCe 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!