Tous les caractères ASCII peuvent être codés avec UTF-8 sans augmentation de la mémoire (les deux nécessitent un octet de mémoire).
UTF-8 présente l'avantage supplémentaire de prendre en charge les caractères au-delà des "caractères ASCII". Si tel est le cas, pourquoi choisirons- nous jamais le codage ASCII sur UTF-8?
Existe-t-il un cas d'utilisation lorsque nous choisirons ASCII au lieu de UTF-8?
character-encoding
utf-8
ascii
Pacerier
la source
la source
Réponses:
Dans certains cas, cela peut accélérer l'accès à des personnages individuels. Imaginez une chaîne
str='ABC'
encodée en UTF8 et en ASCII (et en supposant que le langage / compilateur / base de données connaisse le codage)Pour accéder au caractère third (
C
) à partir de cette chaîne, utilisez un opérateur d'accès à un tableau, présent dans de nombreux langages de programmationc = str[2]
.Maintenant, si la chaîne est encodée en ASCII, tout ce que nous avons à faire est d’extraire le troisième octet de la chaîne.
Si, toutefois, la chaîne de caractères est encodée en UTF-8, nous devons d’abord vérifier si le premier caractère est un caractère à un ou deux octets. Nous devons ensuite effectuer la même vérification sur le deuxième caractère et nous n’aurons alors accès qu’au troisième. La différence de performance sera d'autant plus grande que la chaîne est longue.
Ceci est un problème par exemple dans certains moteurs de base de données, où trouver le début d’une colonne placée "après" un fichier VARCHAR codé en UTF-8, la base de données doit non seulement vérifier le nombre de caractères présents dans le champ VARCHAR, mais également la beaucoup d'octets que chacun utilise.
la source
Si vous n'utilisez que le sous-ensemble US-ASCII (ou ISO 646) de UTF-8, il n'y a alors aucun avantage réel pour l'un ou l'autre; en fait, tout est codé de manière identique.
Si vous allez au-delà du jeu de caractères US-ASCII et utilisez (par exemple) des caractères avec des accents, des trémas, etc., utilisés dans les langues typiques de l'Europe occidentale, il y a une différence - la plupart d'entre eux peuvent encore être codé avec un seul octet dans ISO 8859, mais nécessitera deux octets ou plus lorsqu’il est codé en UTF-8. Bien entendu, il existe également des inconvénients: ISO 8859 exige que vous utilisiez un moyen hors bande pour spécifier le codage utilisé et ne prend en charge qu'un seulde ces langues à la fois. Par exemple, vous pouvez encoder tous les caractères de l’alphabet cyrillique (russe, biélorusse, etc.) en utilisant un seul octet chacun, mais si vous souhaitez / voulez mélanger ceux-ci avec des caractères français ou espagnols (autres que ceux de l’US-ASCII). / ISO 646) vous n’avez pas de chance - vous devez changer complètement les jeux de caractères pour le faire.
ISO 8859 n'est vraiment utile que pour les alphabets européens. Pour prendre en charge la plupart des alphabets utilisés dans la plupart des alphabets chinois, japonais, coréen, arabe, etc., vous devez utiliser un codage complètement différent. Certains d'entre eux (par exemple, Shift JIS pour le japonais) sont une douleur absolue à traiter. S'il y a une chance que vous souhaitiez les prendre en charge, je considère qu'il vaut la peine d'utiliser Unicode au cas où.
la source
La norme ANSI peut avoir plusieurs aspects, la plupart étant des jeux de caractères 8 bits (comme la page de code 1252 sous Windows).
Vous pensiez peut-être à ASCII qui est 7 bits et un sous-ensemble approprié de UTF-8. En d'autres termes, tout flux ASCII valide est également un flux UTF-8 valide.
Si vous envisagiez des jeux de caractères de 8 bits, un avantage très important serait que tous les caractères pouvant être représentés sont exactement de 8 bits, où, dans le format UTF-8, ils peuvent atteindre 24 bits.
la source
Oui, il existe encore quelques cas d'utilisation de l'ASCII: formats de fichier et protocoles réseau . En particulier, pour les utilisations où:
En utilisant ASCII comme codage, vous évitez la complexité du codage sur plusieurs octets tout en conservant au moins une certaine lisibilité.
Quelques exemples:
IDAT
signifie "données d'image" etPLTE
"palette".Bien sûr, vous devez faire attention à ce que les données ne soient pas réellement présentées aux utilisateurs finaux, car si elles finissent par être visibles (comme cela a été le cas pour les URL), alors les utilisateurs s'attendent à ce que ces données soient dans une langue qu'ils peuvent lire.
la source
Tout d’abord: votre titre utilise / d ANSI, alors que dans le texte vous faites référence à ASCII. Veuillez noter que ANSI n'est pas égal à ASCII. ANSI incorpore le jeu ASCII. Mais le jeu ASCII est limité aux 128 premières valeurs numériques (0 - 127).
Si toutes vos données sont limitées à ASCII (7 bits), peu importe que vous utilisiez UTF-8, ANSI ou ASCII, car ANSI et UTF-8 incorporent l'ensemble complet ASCII. En d'autres termes: les valeurs numériques comprises entre 0 et 127 inclus représentent exactement les mêmes caractères en ASCII, ANSI et UTF-8.
Si vous avez besoin de caractères extérieurs au jeu ASCII, vous devez choisir un codage. Vous pouvez utiliser ANSI, mais vous rencontrez ensuite les problèmes de toutes les différentes pages de code. Créer un fichier sur la machine A et le lire sur la machine B peut produire des textes amusants si ces machines sont configurées pour utiliser des pages de codes différentes, simple parce que la valeur numérique nnn représente différents caractères dans ces pages de codes.
Cet "enfer de la page de code" est la raison pour laquelle la norme Unicode a été définie. UTF-8 n’est qu’un codage unique de cette norme, il en existe beaucoup plus. UTF-16 est le plus utilisé car il s’agit du codage natif pour Windows.
Donc, si vous avez besoin de prendre en charge quelque chose au-delà des 128 caractères du jeu ASCII, mon conseil est de choisir UTF-8 . Ainsi, peu importe et vous n'avez pas à vous soucier de la page de code que vos utilisateurs ont configurée pour leurs systèmes.
la source