Je suis confus au sujet de l'encodage du texte et du jeu de caractères. Pour de nombreuses raisons, je dois apprendre des trucs non Unicode, non UTF8 dans mes prochains travaux.
Je trouve le mot "charset" dans les en-têtes de courrier électronique comme dans "ISO-2022-JP", mais il n'y a pas un tel encodage dans les éditeurs de texte. (J'ai regardé autour des différents éditeurs de texte.)
Quelle est la différence entre l'encodage de texte et le jeu de caractères? Je vous serais reconnaissant si vous pouviez me montrer quelques exemples de cas d'utilisation.
Réponses:
Fondamentalement:
la source
Chaque codage est associé à un jeu de caractères particulier, mais il peut y avoir plus d'un codage pour un jeu de caractères donné. Un jeu de caractères est simplement ce à quoi il ressemble, un jeu de caractères. Il existe un grand nombre de jeux de caractères, dont beaucoup sont destinés à des scripts ou à des langages particuliers.
Cependant, nous sommes bien avancés dans la transition vers Unicode, qui comprend un jeu de caractères capable de représenter presque tous les scripts du monde. Cependant, il existe plusieurs encodages pour Unicode. Un encodage est un moyen de mapper une chaîne de caractères sur une chaîne d'octets. Des exemples de codages Unicode incluent UTF-8 , UTF-16 BE et UTF-16 LE . Chacun de ceux-ci présente des avantages pour des applications ou des architectures de machines particulières.
la source
En plus des autres réponses, je pense que cet article est une bonne lecture http://www.joelonsoftware.com/articles/Unicode.html
L'article est intitulé " Le minimum absolu que chaque développeur de logiciel doit absolument, positivement savoir sur Unicode et les jeux de caractères (sans excuses!) " Écrit par Joel Spolsky . L'essai a plus de 10 ans mais (malheureusement) le contenu est toujours valide ...
la source
Un encodage de caractères se compose de:
L'étape n ° 1 en elle-même est un "répertoire de caractères" ou un "jeu de caractères" abstrait, et # 1 + # 2 = un "jeu de caractères codés".
Mais avant que Unicode ne devienne populaire et que tout le monde (sauf les Asiatiques de l'Est) utilisait un encodage à un octet, les étapes 3 et 4 étaient triviales (point de code = unité de code = octet). Ainsi, les protocoles plus anciens ne faisaient pas clairement la distinction entre «encodage de caractères» et «jeu de caractères codés». Les protocoles plus anciens sont utilisés
charset
lorsqu'ils signifient vraiment encodage.la source
Jeter plus de lumière pour les personnes qui visitent désormais, j'espère que cela serait utile.
Jeu de caractères
Il y a des caractères dans chaque langue et la collection de ces caractères forme le «jeu de caractères» de cette langue. Lorsqu'un caractère est codé, un identifiant unique ou un numéro appelé comme point de code lui est attribué. En informatique, ces points de code seront représentés par un ou plusieurs octets.
Exemples de jeu de caractères: ASCII (couvre tous les caractères anglais), ISO / CEI 646, Unicode (couvre les caractères de toutes les langues vivantes du monde)
Jeu de caractères codés
Un jeu de caractères codés est un jeu dans lequel un numéro unique est attribué à chaque caractère. Ce numéro unique est appelé "point de code".
Les jeux de caractères codés sont parfois appelés pages de codes.
Codage
L'encodage est le mécanisme permettant de mapper les points de code avec certains octets afin qu'un caractère puisse être lu et écrit uniformément sur différents systèmes en utilisant le même schéma de codage.
Exemples de codage: ASCII, schémas de codage Unicode comme UTF-8, UTF-16, UTF-32.
Élaboration des 3 concepts ci-dessus
09 15
) lors de l'utilisation du codage UTF-16FC
tandis qu'en «UTF-8», il est représenté parC3 BC
et en UTF-16 commeFE FF 00 FC
.09 15
), trois octets avec UTF-8 (E0 A4 95
), ou quatre octets avec UTF-32 (00 00 09 15
)la source
Un jeu de caractères, ou répertoire de caractères, est simplement un ensemble (une collection non ordonnée) de caractères. Un jeu de caractères codés attribue un entier (un "point de code") à chaque caractère du répertoire. Un codage est un moyen de représenter des points de code sans ambiguïté sous forme de flux d'octets.
la source
Googlé pour cela. http://en.wikipedia.org/wiki/Character_encoding
La différence semble subtile. Le terme charset ne s'applique en fait pas à Unicode. Unicode passe par une série d'abstractions. caractères abstraits -> points de code -> codage des points de code en octets.
Les jeux de caractères ignorent cela et sautent directement de caractères en octets. séquence d'octets <-> séquence de caractères
En bref, encodage: points de code -> octets charset: caractères -> octets
la source
Un jeu de caractères n'est qu'un ensemble; soit il contient, par exemple, le signe Euro, soit il ne le contient pas. C'est tout.
Un codage est un mappage bijectif d'un jeu de caractères à un ensemble d'entiers. S'il prend en charge le signe Euro, il doit attribuer un entier spécifique à ce caractère et à aucun autre.
la source
À mon avis, un charset fait partie d'un encodage (un composant), l'encodage a un attribut charset, donc un charset peut être utilisé dans de nombreux encodages. Par exemple, unicode est un jeu de caractères utilisé dans des encodages comme UTF-8, UTF-16 et ainsi de suite. Voir l'illustration ici:
Le char dans charset ne signifie pas le type char dans le monde de la programmation, cela signifie un char dans le monde réel, en anglais c'est peut-être la même chose, mais dans d'autres langues pas, comme le chinois, '我' est un 'char' inséparable dans les jeux de caractères (UNICODE, GB [utilisé dans GBK et GB2312]), 'a' est également un caractère dans les jeux de caractères (ASCII, ISO-8859 , UNICODE).
la source
À mon avis, le mot «charset» devrait être limité à l'identification du paramètre utilisé dans HTTP, MIME et des normes similaires pour spécifier un codage de caractères (un mappage d'une série de caractères de texte à une séquence d'octets) par nom. Par exemple:
charset=utf-8
.Je suis conscient, cependant, que MySQL, Java et d'autres endroits peuvent utiliser le mot "charset" pour désigner un encodage de caractères.
la source
Un encodage est un mappage entre les octets et les caractères d'un jeu de caractères, il sera donc utile de discuter et de comprendre la différence entre les octets et les caractères .
Considérez les octets comme des nombres entre 0 et 255, alors que les caractères sont des choses abstraites comme "a", "1", "$" et "Ä". L'ensemble de tous les caractères disponibles est appelé un jeu de caractères .
Chaque caractère a une séquence d'un ou plusieurs octets qui sont utilisés pour le représenter; cependant, le nombre et la valeur exacts des octets dépendent du codage utilisé et il existe de nombreux codages différents.
La plupart des encodages sont basés sur un ancien jeu de caractères et un encodage appelés ASCII qui est un octet par caractère (en fait, seulement 7 bits) et contient 128 caractères, y compris un grand nombre des caractères courants utilisés en anglais américain.
Par exemple, voici 6 caractères dans le jeu de caractères ASCII qui sont représentés par les valeurs 60 à 65.
Dans l'ensemble ASCII complet, la valeur la plus basse utilisée est zéro et la plus élevée est 127 (les deux sont des caractères de contrôle masqués).
Cependant, une fois que vous commencez à avoir besoin de plus de caractères que l'ASCII de base fournit (par exemple, des lettres avec des accents, des symboles monétaires, des symboles graphiques, etc.), l'ASCII ne convient pas et vous avez besoin de quelque chose de plus complet. Vous avez besoin de plus de caractères (un jeu de caractères différent) et vous avez besoin d'un codage différent car 128 caractères ne suffisent pas pour contenir tous les caractères. Certains codages offrent un octet (256 caractères) ou jusqu'à six octets.
Au fil du temps, de nombreux encodages ont été créés. Dans le monde Windows, il existe CP1252, ou ISO-8859-1, alors que les utilisateurs de Linux ont tendance à privilégier UTF-8. Java utilise UTF-16 de manière native.
Une séquence de valeurs d'octet pour un caractère dans un codage peut représenter un caractère complètement différent dans un autre codage, ou peut même être invalide.
Par exemple, dans la norme ISO 8859-1 , â est représenté par un octet de valeur
226
, alors que dans UTF-8 , il est deux octets:195, 162
. Cependant, dans ISO 8859-1 , il y195, 162
aurait deux caractères, Ã, ¢ .Lorsque les ordinateurs stockent des données sur les caractères en interne ou les transmettent à un autre système, ils stockent ou envoient des octets. Imaginez qu'un système ouvrant un fichier ou recevant un message voit les octets
195, 162
. Comment sait-il de quels personnages il s'agit?Pour que le système interprète ces octets comme des caractères réels (et ainsi les affiche ou les convertit en un autre codage), il doit connaître le codage utilisé. C'est pourquoi l'encodage apparaît dans les en-têtes XML ou peut être spécifié dans un éditeur de texte. Il indique au système le mappage entre les octets et les caractères.
la source