Pourquoi as-tu besoin de codage ?
La plus petite unité de stockage de l’ordinateur est un octet (octet), et le nombre de caractères pouvant être représentés par un octet est limité, 1 octet = 8 bits, un octet ne peut représenter que 255 caractères au maximum, et il existe de nombreux langages dans le monde, il existe divers caractères qui ne peuvent pas être représentés par un octet, donc le caractère de représentation char en Java est pour résoudre ce problème de codage : un char occupe deux octets, il doit donc être encodé entre char et le plus petit octet unitaire. L’inverse est le décodage.
En fait, l’encodage et le décodage constituent le processus de traduction achevé (la « traduction » est facile à comprendre), et diverses méthodes de codage sont des dictionnaires.
1. Code ASCII
Le nom complet est American Standard Code for Information Interchange, qui est le système de codage à octet unique le plus courant au monde, principalement utilisé pour afficher l’anglais moderne et d’autres langues d’Europe occidentale.
Le code ASCII est représenté par 7 bits, qui ne peuvent représenter que 128 caractères, et 0~31 représente des caractères de contrôle tels que entrée, retour arrière, supprimer, etc. ; 32~126 signifie que les caractères imprimés peuvent être saisis via le clavier et affichés.
Parmi eux, 48~57 correspond à 0 à 9 dix chiffres arabes, 65~90 correspond à 26 lettres anglaises majuscules, 97~122 correspond à 26 lettres anglaises minuscules, et le reste est composé de signes de ponctuation, de symboles d’opération, etc., qui peuvent se référer au tableau standard ASCII pour plus de détails.
2、ISO-8859-1
Ce codage est une extension de l’encodage ASCII, mais il s’agit toujours d’un codage à un seul octet et ne peut représenter qu’un total de 256 caractères.
Puisque l’ASCII ne peut représenter que 128 caractères, l’affichage ne peut pas être pleinement expriméISO-8859-1 étend l’encodage ASCIIAu-dessus du code ASCII, les symboles textuels correspondants des langues d’Europe occidentale, grec, thaï, arabe et hébreu, sont ajoutés, et il est rétrocompatible avec l’encodage ASCII.
3、GB2312
Le nom complet de GB2312 est « Information Technology Chinese Encoding Character Set », qui est un encodage de deux octets avec une plage de codage de A1 à F7, dont A1-A9 correspond à la zone des symboles, contenant un total de 682 symboles ; B0-F7 correspond à la zone des kanji, contenant 6 763 kanji.
Le nom complet est ensemble de caractères chinois pour l’échange d’informations, publié par la Chine en 1980 et principalement utilisé pour le traitement des caractères chinois dans les systèmes informatiques. GB2312 contient principalement 6 763 caractères chinois et 682 symboles.
GB2312 couvre la majeure partie de l’utilisation des caractères chinois, mais ne peut pas gérer des caractères rares spéciaux comme le chinois ancien, donc des codes comme GBK et GB18030 sont apparus plus tard.
4、GBK
Le nom complet de GBK est la « Chinese Character Internal Code Extension Specification », qui semble étendre GB2312, sa plage d’encodage est 8140-FEFE (supprimer XX7F), avec un total de 23940 bits de code, pouvant représenter 21003 caractères chinois, et son encodage est compatible avec GB2312
GBK, le nom complet de la spécification interne chinoise du code, a été formulé en 1995. Il étend principalement GB2312 et ajoute davantage de caractères chinois sur sa base, qui contient un total de 21 003 caractères chinois.
GBK est rétrocompatible avec l’encodage GB2312, ce qui signifie que les caractères chinois encodés dans GB2312 peuvent être décodés normalement avec GBK et ne paraissent pas brouillés, mais les caractères chinois encodés avec GBK ne sont pas nécessairement décodés avec GB2312.
5、GB18030
GB18030 nom complet est la spécification d’extension interne du code des caractères chinois, qui est le dernier jeu de caractères internes publié en 2000 et appliqué en 2001, incluant les caractères linguistiques de la plupart des minorités ethniques en Chine, et contenant plus de 70 000 caractères chinois.
Il utilise principalement un codage de caractères à octet unique, double octet et quatre octets, et il est rétrocompatible avec GB2312 et GBK, bien qu’il s’agisse d’une norme obligatoire dans notre pays, mais il est rarement utilisé en production réelle, les plus utilisés étant GBK et GB2312.
6.UNICODE
Pour que leur langue soit affichée normalement dans l’ordinateur, chaque pays et région possède son propre code, donc personne ne connaît le code des autres s’il y a trop de codes, à cette époque, l’organisation ISO a proposé un nouveau code appelé codage UNICODE pour prendre en charge les cultures, caractères et symboles globaux. Lorsque UNICODE a été formulé, la capacité informatique n’était plus un problème, il a donc été conçu pour être fixé à deux octets, et tous les caractères étaient représentés en 16 bits, y compris les caractères anglais qui n’occupaient auparavant que 8 bits, ce qui entraînait un gaspillage d’espace, et UNICODE n’a pas été promu ni appliqué pendant longtemps.
7、UTF-16
L’émergence de l’UTF-16 est l’ISO pour créer un nouveau dictionnaire supralingual, à travers lequel toutes les langues du monde peuvent se traduire mutuellement, vous pouvez imaginer à quel point ce dictionnaire est complexe et immense. UTF-16 utilise deux octets pour représenter le format de conversion Unicode (deux octets font 16 bits, donc UTF-16) est une méthode de représentation à longueur fixe, c’est-à-dire que n’importe quel caractère peut être représenté en deux octets. Cela rend la représentation des personnages très pratique. Cependant, il y a aussi un défaut : une grande partie des caractères peut être représentée en un octet, mais UTF-16 utilise deux octets, ce qui est un gaspillage d’espace de stockage. Il existe donc une autre façon d’encodage, qui est l’UTF-8.
UTF-16 est l’implémentation spécifique d’UNICODE, 16 correspond à 16 bits, UTF-16 est l’origine, définissant la manière dont les caractères UNICODE sont stockés dans l’ordinateur, UTF-16 utilise également deux octets pour représenter n’importe quel caractère, ce qui rend la chaîne d’opérations très efficace, ce qui est aussi une raison importante pour laquelle Java utilise UTF-16 comme format pour stocker les caractères en mémoire.
UTF-16 convient à une utilisation entre disque et mémoire, et la conversion des caractères et octets entre eux sera plus simple et plus efficace, mais il n’est pas adapté à la transmission en réseau, ce qui pourrait endommager le flux d’octets.
8、UTF-8
UTF-8 utilise une technologie de longueur variable où chaque région d’encodage a des longueurs de code différentes, et différents types de caractères peuvent être composés de 1 à 6 octets.
Les règles d’encodage pour UTF-8 sont les suivantes :
1) Si c’est 1 octet et que le bit le plus élevé est 0, cela signifie qu’il s’agit d’un caractère ASCII. On peut voir que tous les encodages ASCII sont déjà UTF-8
2) Si c’est 1 octet, commençant par 11, le nombre de 1 consécutifs implique 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 c’est 1 octet, commençant par 10, cela signifie que ce n’est pas le premier octet, il faut attendre d’obtenir le premier octet du caractère actuel.
Bien que l’UTF-16 soit très efficace, c’est aussi le plus grand inconvénient d’UNICODE, car tous les caractères d’un seul octet doivent prendre en compte deux octets, et l’espace de stockage est doublé, ce qui consomme évidemment des ressources et ne correspond pas à la situation actuelle de développement rapide d’Internet. Ainsi, avec UTF-8, il s’agit d’une implémentation d’encodage de caractères à longueur variable d’UNICODE, qui peut utiliser 1~6 octets de longueur fixe pour encoder des caractères UNICODE.
UTF-8 utilise un stockage à octet unique pour les caractères ASCII, et si un seul caractère est corrompu, cela n’affectera pas les caractères suivants, donc UTF-8 est idéal pour le traditionnel sur le web et est l’un des encodages les plus utilisés aujourd’hui.
Si vous voulez représenter le chinois, l’efficacité de l’encodage UTF-8 est supérieure à celle du GBK et inférieure à celle du UTF-16, donc c’est aussi la méthode d’encodage la plus idéale après le GBK. |