168 votes

Quelle est la différence entre encodage et charset ?

Je ne comprends pas bien le codage et le jeu de caractères du texte. Pour de nombreuses raisons, je dois apprendre des choses non-Unicode, non-UTF8 dans mon travail à venir.

Je trouve le mot "charset" dans les en-têtes de courriel comme dans "ISO-2022-JP", mais il n'y a pas un tel encodage dans les éditeurs de texte. d'encodage dans les éditeurs de texte. (J'ai fait le tour des différents éditeurs de texte).

Quelle est la différence entre l'encodage de texte et le charset ? Je vous serais reconnaissant si vous pouviez me montrer des exemples de cas d'utilisation.

0 votes

168voto

Svetlozar Angelov Points 10583

En gros :

  1. charset est le jeu de caractères que vous pouvez utiliser
  2. le codage est la manière dont ces caractères sont stockés en mémoire

48 votes

C'est vrai, mais dans la pratique, "charset" se réfère généralement à les deux le répertoire de caractères et le schéma d'encodage.

0 votes

@AlanMoore En effet, à peu près de la même manière que les gens disent "nombre décimal" pour désigner tout nombre avec un "séparateur décimal". Ce n'est pas vraiment correct, mais oui vous devez être conscient que certaines personnes l'utilisent comme ça.

4 votes

Ce n'est pas tout à fait exact. Par exemple, Unicode fait référence au jeu de caractères, mais il existe plusieurs encodages possibles (UTF-8, UTF-16, UTF-32).

95voto

Matthew Flaschen Points 131723

Chaque encodage est associé à un jeu de caractères particulier, mais il peut y avoir plus d'un encodage pour un jeu de caractères donné. Un jeu de caractères est simplement ce à quoi il ressemble, un ensemble de caractères. Il existe un grand nombre de jeux de caractères, dont beaucoup sont destinés à des écritures ou des langues particulières.

Cependant, nous sommes bien avancés dans la transition vers Unicode, qui comprend un jeu de caractères capable de représenter presque toutes les écritures du monde. Cependant, il existe plusieurs encodages pour Unicode. Un encodage est une façon de faire correspondre une chaîne de caractères à une chaîne d'octets. Voici quelques exemples d'encodages Unicode UTF-8 , UTF-16 BE et UTF-16 LE . Chacune d'entre elles présente des avantages pour des applications ou des architectures de machines particulières.

25 votes

Notez que javadoc utilise à tort "charset" au lieu de "encodage", par exemple dans InputStreamReader nous lisons "Un InputStreamReader est un pont entre les flux d'octets et les flux de caractères : Il lit les octets et les décode en caractères en utilisant un jeu de caractères spécifié. Le jeu de caractères qu'il utilise peut être spécifié par son nom ou être donné explicitement, ou le jeu de caractères par défaut de la plate-forme peut être accepté." . Cependant, ce qu'ils veulent dire, c'est "encodage".

6 votes

Merci pour votre explication. Unicode est un jeu de caractères, et UTF-8 est un moyen d'encodage de Unicode et UTF-16 est un autre moyen d'encodage de Unicode .

58voto

mattanja Points 664

En plus des autres réponses, je pense que cet article est une bonne lecture : Le minimum absolu que tout développeur de logiciels doit absolument, positivement connaître sur Unicode et les jeux de caractères (pas d'excuses !) par Joel Spolsky

L'essai date de 2003, mais (malheureusement) son contenu est toujours valable...

2 votes

Merci beaucoup d'avoir présenté cet article. Il est une bonne.

10 votes

Cette réponse pourrait être améliorée en donnant une brève explication des éléments suivants pourquoi Je devrais lire l'article de Joel.

0 votes

@mattanja Le lien que vous avez fourni est vraiment génial. Merci de le partager. J'ai voté pour.

33voto

dan04 Points 33306

Un codage de caractères consiste en :

  1. L'ensemble des caractères pris en charge
  2. Une correspondance entre les caractères et les entiers ("points de code")
  3. Comment les points de code sont codés sous la forme d'une série d'"unités de code" (par exemple, des unités de 16 bits pour UTF-16).
  4. Comment les unités de code sont codées en octets (par exemple, big-endian ou little-endian).

L'étape n° 1 constitue en soi un "répertoire de caractères" ou un "jeu de caractères" abstrait, et l'étape n° 1 + n° 2 = un "jeu de caractères codés".

Mais avant que l'Unicode ne devienne populaire et que tout le monde (sauf les Asiatiques de l'Est) n'utilise un codage à un seul octet, les étapes 3 et 4 étaient triviales (point de code = unité de code = octet). Ainsi, les anciens protocoles ne faisaient pas clairement la distinction entre "codage de caractères" et "jeu de caractères codés". Les anciens protocoles utilisent charset alors qu'il s'agit en réalité d'encodage.

0 votes

Serait-ce la raison pour laquelle nous pouvons lire charset='utf-8' dans la balise META du html ? parce qu'elle a été définie il y a longtemps.

15voto

Jonathan Feinberg Points 24791

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 nombre entier (un "point de code") à chaque caractère du répertoire. Un codage est un moyen de représenter sans ambiguïté les points de code sous la forme d'un flux d'octets.

0 votes

Cela devrait être la réponse acceptée. Elle définit clairement trois concepts : jeu de caractères, jeu de caractères codés et encodage.

0 votes

Étant donné que nous veillons à éviter toute ambiguïté due à des termes anglais mal choisis, nous devrions nous en tenir à ne pas utiliser le terme "octet", puisque l'octet n'a pas de taille fixe (du moins pas en C). Si vous voulez parler d'unités de 8 bits, veuillez utiliser le terme "octets" au lieu de "bytes".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X