web-dev-qa-db-fra.com

Qu'est-ce que le format ANSI?

Quel est le format de codage ANSI? Est-ce un format par défaut du système? En quoi diffère-t-il de l'ASCII?

195
web dunia

Le codage ANSI est un terme légèrement générique utilisé pour faire référence à la page de codes standard d’un système, généralement Windows. Il est plus correctement appelé Windows-1252 sur Western/U.S. systèmes. (Il peut représenter certains autres pages de codes Windows sur d'autres systèmes.) Il s'agit essentiellement d'une extension du jeu de caractères ASCII dans la mesure où il inclut tous les ASCII caractères avec 128 codes de caractères supplémentaires. Cette différence est due au fait que le codage "ANSI" est de 8 bits plutôt que de 7 bits comme ASCII est (ASCII est presque toujours codé en tant qu’octets de 8 bits avec le MSB mis à 0). Voir l'article pour une explication de la raison pour laquelle ce codage est généralement appelé ANSI.

Le nom "ANSI" est un terme impropre, car il ne correspond à aucune norme ANSI réelle, mais le nom est resté. ANSI n'est pas la même chose que UTF-8.

219
Noldorin

Techniquement, ANSI devrait être identique à US-ASCII. Il fait référence à la norme ANSI X3.4, qui est simplement la version ratifiée de l'organisation ANSI de l'ASCII. L'utilisation des caractères du jeu de bits supérieur n'est pas définie dans ASCII/ANSI, car il s'agit d'un jeu de caractères de 7 bits.

Cependant, des années d'utilisation abusive du terme par le DOS, puis par la communauté Windows, ont laissé sa signification pratique en tant que "page de code système de toute machine utilisée". La page de codes du système est aussi parfois appelée "mbcs", car sur les systèmes d’Asie de l’Est, il peut s’agir d’un codage à plusieurs octets par caractère. Certaines pages de code peuvent même utiliser des octets top-bit-clear comme octets de fin dans une séquence multi-octets. Par conséquent, ils ne sont même pas strictement compatibles avec du code ASCII en clair ... mais même dans ce cas, ils s'appellent toujours "ANSI".

Les paramètres par défaut des États-Unis et de l'Europe occidentale sont "ANSI" mappés sur la page de code Windows 1252. Ce n'est pas la même chose que ISO-8859-1 (bien que ce soit assez similaire). Sur d'autres machines, cela pourrait être n'importe quoi d'autre. Cela rend "ANSI" totalement inutile comme identifiant de codage externe.

55
bobince

À proprement parler, l'encodage ANSI n'existe pas. Le terme ANSI est couramment utilisé pour plusieurs codages différents:

  1. ISO 8859-1
  2. Windows CP1252
  3. Codage système actuel sur une machine Windows (dans la terminologie de l'API Win32).
30
Nemanja Trifunovic

Il était une fois Microsoft, comme tout le monde, utilisait des jeux de caractères 7 bits et ils inventaient les leurs quand cela leur convenait, même s'ils conservaient ASCII en tant que sous-ensemble principal. Ils ont ensuite réalisé que le monde était passé au codage 8 bits et qu’il existait des normes internationales, telles que la famille ISO-8859. À cette époque, si vous vouliez vous procurer une norme internationale et que vous viviez aux États-Unis, vous l’achetiez à l’ANSI, l’American National Standards Institute, qui republiait les normes internationales avec leur propre marque et leur propre numéro (le gouvernement américain conformité aux normes américaines, pas aux normes internationales). Ainsi, la copie ISO-8859 de Microsoft porte la mention "ANSI" sur la couverture. Et comme Microsoft n'était pas très habitué aux normes à cette époque, ils ne réalisaient pas que l'ANSI avait également publié beaucoup d'autres normes. Ils ont donc fait référence aux normes de la famille ISO-8859 (et aux variantes qu’ils ont inventées, car ils ne comprenaient pas vraiment les normes à cette époque) sous le nom de couverture, "ANSI", qui a ensuite trouvé sa place dans Microsoft. documentation utilisateur et donc dans la communauté des utilisateurs. C'était il y a environ 30 ans, mais vous entendez encore parfois le nom aujourd'hui.

15
Michael Kay

ASCII définit simplement une page de code de 7 bits avec 128 symboles. ANSI étend cela à 8 bits et il y a plusieurs pages de codes différentes pour les symboles 128 à 255.

Le nom ANSI n’est pas correct car c’est la norme ISO/CEI 8859 qui définit ces pages de code. Voir ISO/IEC 8859 pour référence. Il y a 16 pages de codes ISO/IEC 8859-1 à ISO/IEC 8859-16.

Windows-1252 est à nouveau basé sur ISO/IEC 8859-1 avec quelques modifications principalement dans la plage de jeu de contrôles C1 dans la plage de 128 à 159. Wikipédia indique que Windows -1252 est également désigné ISO-8859-1 avec un deuxième trait d'union entre ISO et 8859. (Incroyable! Qui fait quelque chose comme ça?!?)

13
Daniel Brückner

Fondamentalement, "ANSI" fait référence à la page de codes héritée sous Windows. Voir aussi n article de Raymond Chen sur ce sujet. Les 127 premiers caractères sont identiques à ASCII dans la plupart des pages de code, mais les caractères supérieurs varient.

Cependant, ANSI ne signifie pas automatiquement CP1252 ou Latin 1.

Malgré toute confusion, vous devriez simplement éviter de tels problèmes de nos jours et utiliser Unicode.

4
Joey

Juste au cas où votre ordinateur n’est pas un ordinateur "occidental" et que vous ne sachiez pas quelle page de code est utilisée, vous pouvez consulter cette page: Référence de l’API du support de langue nationale (NLS)

[Microsoft a supprimé cette référence, elle a pris la forme d'archive Web Référence de l'API NLS)

Ou vous pouvez interroger votre registre:

C:\>reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /f ACP

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
    ACP    REG_SZ    1252

End of search: 1 match(es) found.

C:\>
2

Je me souviens quand le texte "ANSI" faisait référence aux pseudo-codes d'échappement VT-100 utilisables sous DOS par le biais du pilote ANSI.SYS pour modifier le flux du texte en streaming ... Ce n'est probablement pas ce dont vous parlez, mais s'il est vu - http://en.wikipedia.org/wiki/ANSI_escape_code

1
jmucchiello

Lors de l'utilisation de caractères à un octet, le format ASCII définit les 127 premiers caractères. Les caractères étendus de 128 à 255 sont définis par différentes pages de codes ANSI afin de permettre une prise en charge limitée d'autres langues. Afin de donner un sens à une chaîne encodée ANSI, vous devez savoir quelle page de code elle utilise.

1
Eric Petroelje