Unicode, Unicode Big Endian ou UTF-8? Quelle est la différence? Quel format est le meilleur?

19

Lorsque j'essaie d'enregistrer un fichier texte avec du texte non anglais dans le bloc-notes, j'obtiens une option pour choisir entre Unicode , Unicode Big Endian et UTF-8 . Quelle est la différence entre ces formats?

En supposant que je ne ne veux aucune compatibilité descendante (avec les anciennes versions OS ou applications) et je ne pas se soucier de la taille du fichier, lequel de ces formats est mieux?

(Supposons que le texte puisse être dans des langues comme le chinois ou le japonais, en plus d'autres langues.)

Remarque: D'après les réponses et commentaires ci-dessous, il semble que dans le jargon du bloc-notes, Unicode est UTF-16 (Little Endian), Unicode Big Endian est UTF-16 (Big Endian) et UTF-8 est bien UTF-8.

Ashwin Nanjappa
la source

Réponses:

19

Je ne sais pas. Quel est le meilleur: une scie ou un marteau? :-)

Unicode n'est pas UTF

Il y a un peu dans l'article qui est un peu plus pertinent par rapport au sujet traité:

  • UTF-8 se concentre sur la réduction de la taille des octets pour la représentation des caractères de l'ensemble ASCII (représentation de longueur variable: chaque caractère est représenté sur 1 à 4 octets, et les caractères ASCII tiennent tous sur 1 octet). Comme le dit Joel:

«Regardez tous ces zéros!», Ont-ils dit, car ils étaient américains et regardaient du texte anglais qui utilisait rarement des points de code supérieurs à U + 00FF. Ils étaient également des hippies libéraux en Californie qui voulaient conserver (ricaner). S'ils étaient Texans, cela ne les dérangerait pas de gober le double du nombre d'octets. Mais ces mauviettes californiennes ne pouvaient pas supporter l'idée de doubler la quantité de stockage nécessaire pour les chaînes

  • UTF-32 se concentre sur l'exhaustivité et la représentation de longueur fixe, en utilisant 4 octets pour tous les caractères. C'est la traduction la plus simple, mappant directement le point de code Unicode à 4 octets. De toute évidence, ce n'est pas très efficace en termes de taille.

  • UTF-16 est un compromis, utilisant 2 octets la plupart du temps, mais s'étendant à 2 * 2 octets par caractère pour représenter certains caractères, ceux qui ne sont pas inclus dans le plan multilingue de base (BMP).

Voir également le minimum absolu que tous les développeurs de logiciels doivent absolument savoir sur Unicode et les jeux de caractères (pas d'excuses!)

Jason Baker
la source
4
Le problème vient du fait que Unicode est un «encodage», mais pas au sens des nombres en octets. UTF-8/16/32 sont tous des codages Unicode, mais Unicode lui-même est un mappage des symboles aux nombres. Ils auraient pu utiliser une terminologie plus unique pour éviter cette confusion, je pense.
jerryjvl
4
Quoi qu'il en soit, pour l'OP de la question, les chances sont que l'application signifie «UTF-16» où elle dit «Unicode».
jerryjvl
3
Je ne suis pas sûr que l'objectif d'UTF-8 soit la "conservation" par opposition à la rétrocompatibilité avec ASCII.
M. Shiny et New 安 宇
@Johannes: Le consortium Unicode a décidé de ne jamais attribuer de points de code au-dessus de U + 10FFFF car ils ne peuvent pas être représentés en UTF-16. Cela a eu pour effet de restreindre UTF-8 à 4 octets.
user46971
1
"Unicode n'est pas UTF" - pour beaucoup, c'est WTF;)
mlvljr
4

Pour les langues européennes, UTF-8 est plus petit. Pour les langues orientales, la différence n'est pas aussi nette.

Les deux géreront tous les caractères Unicode possibles, donc cela ne devrait faire aucune différence de compatibilité.

Mark Ransom
la source
3

Il y a plus d'encodages de caractères Unicode que vous ne le pensez.

  • UTF 8

    Le codage UTF-8 est de largeur variable, allant de 1 à 4 octets, les bits supérieurs de chaque octet étant réservés comme bits de contrôle. Les bits de tête du premier octet indiquent le nombre total d'octets utilisés pour ce caractère. La valeur scalaire du point de code d'un caractère est la concaténation des bits non contrôlés. Dans ce tableau, xreprésente les 8 bits les plus bas de la valeur Unicode, yreprésente les 8 bits supérieurs suivants et zreprésente les bits supérieurs à cela.

    Unicode              Byte1     Byte2     Byte3     Byte4
    U+0000-U+007F       0xxxxxxx            
    U+0080-U+07FF       110yyyxx  10xxxxxx          
    U+0800-U+FFFF       1110yyyy  10yyyyxx  10xxxxxx    
    U+10000-U+10FFFF    11110zzz  10zzyyyy  10yyyyxx  10xxxxxx
    
  • UCS-16
  • UCS-16BE
  • UCS-16LE

  • UTF-16
  • UTF-16BE
  • UTF-16LE

  • UTF-32
  • UTF-32-BE
Brad Gilbert
la source
1
Il y a plus d'encodages de caractères Unicode que vous n'en avez répertoriés. Par exemple UTF-1 , UTF-7 , UTF-EBCDIC , GB-18030 , MIME , UTF-9 et UTF-18 ... Vous pouvez également utiliser n'importe quel schéma de codage binaire pour coder les données Unicode. En savoir plus Comparaison des encodages Unicode
phuclv
1

"Unicode" est un autre terme pour "UTF-16", qui est un codage du jeu de caractères Unicode en seize bits par caractère. UTF-8 l'encode en huit bits par caractère.

Dans les deux cas, tout débordement est alloué à 16 ou 8 bits supplémentaires.

John Saunders
la source
Laquelle est la meilleure alors?
R. Martinho Fernandes
"Ça dépend de la situation.
John Saunders
Bien que pour cette question spécifique, il semble que "Unicode" soit en effet ABUSÉ comme un autre terme pour "UTF-16", ce n'est pas le cas en général - voir la réponse de Jason.
Arjan
1
Vous voulez dire "par unité de code", pas "par caractère"; UTF-8 et UTF-16 peuvent utiliser plusieurs unités de code pour représenter un caractère. Et "Unicode" et "UTF-16" ne sont PAS la même chose, sauf dans la terminologie Microsoft.
user46971
1

Le seul véritable avantage avec les petits fichiers comme les fichiers texte est la taille du fichier résultant. UTF-8 produit généralement des fichiers plus petits. Mais cette différence peut être moins prononcée avec le texte chinois / japonais.

zildjohn01
la source
Gardez à l'esprit qu'il existe également une différence dans la bande passante du réseau et l'utilisation de la mémoire.
Jason Baker
1
"UTF-8 produit généralement des fichiers plus petits": Pas généralement. UTF-8 produit des fichiers plus petits pour les fichiers ASCII. Si un fichier se compose uniquement de points de code Unicode supérieurs à U + 0800, il sera plus grand en UTF-8 qu'en UTF-16.
sleske
0

En un mot, Unicode est un jeu de caractères , tandis que Unicode Big Endian et utf-8 sont deux encodages , qui sont utilisés pour stocker des caractères sous forme de 01 sur un ordinateur.

thuzhf
la source
Et la différence est ...?
David Richerby